mysql索引
常见的mysql索引类型:Hash索引、B树、B+树


在 MySQL 中,MyISAM 引擎和 InnoDB 引擎都是使用 B+Tree 作为索引结构,但是,两者的实现方式不太一样。

聚集索引
聚集索引即索引结构和数据一起存放的索引。主键索引属于聚集索引。
非聚集索引
非聚集索引即索引结构和数据分开存放的索引。
二级索引属于非聚集索引。





索引下推:和最左匹配都是针对复合索引的。
select * from tb1 where name = ? and age = ?


索引失效

比如数据库存储phone字段是varchar类型的,但是使用select * from t_user where phone = 1300000001;语句检索导致全表扫描没有用索引。
原理:select "10" > 9; 输出1,即mysql比较字符串和数字的时候会把字符串转换为数字,因此上面那条语句就变成了select * from t_user where CAST(phone AS signed int) = 1300000001;实际上还是对索引字段使用函数导致索引失效。而select * from t_user where id = "1";就不会导致索引失效,因为这条语句相当于:select * from t_user where id = CAST("1" AS signed int); 并没有对索引字段使用函数,因此索引不会失效。

or语句为啥不走索引:select * from t_user where id = 1 or age = 18; age没有索引,这种情况才会索引失效,因为or是2者满足一个即可,都要检索。解决办法:age也建立索引即可。

整理自www.javaguide.cn
浙公网安备 33010602011771号