索引
B+TREE
哈希
普通索引找id,然后通过id主键索引找数据
单列索引,多列索引,唯一索引
根节点,叶子节点,非叶子节点
聚簇索引/主键索引:需要查询的数据就在索引叶子节点内(叶子节点保存的数据是所有数据)
非聚簇索引/普通索引:通过索引找到主键id(叶子节点保存的数据是id),然后在走主键索引找到数据
覆盖索引/Extra:using index:只查找索引列数据,不查除索引列之外的数据,此时非叶子节点就是该索引列的值,不需要回表(不用再通过主键索引找到数据,所需要的数据都在索引内)
普通索引 name,age
select name,age from t1 where name='wang' and age=11 //覆盖索引,查找的列在索引内
select id,name,age from t1 where name='wang' and age=11 //没有覆盖索引,id不在索引列上
应用:
比如通过name查找age
就可以使用覆盖索引 创建联合索引 name,age
select age from t1 where name ='wang' //覆盖索引
索引创建原则
where order by group by
左原则:适用于联合索引(多列)
索引失效的原因:
1.有or;
2.复合(多列)索引未用左列字段;
3.like以%开头;
4.需要类型转换;
5.where中索引列有运算;
6.where中索引列使用了函数;
7.如果mysql觉得全表扫描更快时(数据少);
索引下推:5.6新增
浙公网安备 33010602011771号