Mysql索引笔记

1、InnoDB

聚簇索引:索引文件和数据文件在一起

主索引的叶子节点直接保存的数据,辅助索引的叶子节点存储的主键值。

支持事务,行级锁,支持B+tree索引,支持fulltext索引,不支持hash索引

2、MyISAM

非聚簇索引:索引文件和数据文件分开存储

主索引和辅助索引的结构完全相同,叶子节点存储数据的物理地址

不支持事务,表级锁,支持B+tree索引,支持fulltext索引,不支持hash索引

3、索引无法命中的情况

 --like '%xx',左侧模糊匹配

select * from table where a like '%xx';

 

--使用函数

select * from table where reverse(a) = 'xxxx';

 

--or,可以用union all改写

 

--类型不一致,如果列是字符类型,传入条件必须用单引号引起来

select * from table where a = 999;

 

--普通索引的不等于不会走索引,如果是主键或者非主键的整数类型则会走索引

select * from table where a != 'xxx';   --不会走索引

select * from table where a != 2;      --会走索引

 

--排序条件是索引列,则select列也必须是索引,否则无法命中

select b from table order by a desc;  --列a所索引,b没有索引,则查询不走索引

如果对主键排序,则会走索引

select * from table order by id desc;

 

--组合索引,最左前缀匹配

如果存在索引(a,b,c)

a和a,b和a,b,c能匹配到索引,其他的不能


--count(1)、count(列)替代count(*)在mysql中没有什么差别

--当某个列的长度比较长时,可以将该列的前n个位建立索引,以减小索引大小。

 

 

你可能感兴趣的:(数据库,mysql)