关于MySQL的索引基础,不定期更新
**一、索引的区别 **
主键索引:不能空,不能重复
普通索引:没有限制
复合索引:多个普通索引
全文索引:适用于大数据查询,只能在mysaim引擎下才能使用,关键字的来源不是所有字段的数据,而是从字段中提取的特别关键词。
唯一索引:要求关键字不能重复。同时增加唯一约束。
**二、索引使用注意 **
1、不要过度索引,索引越多,占用空间越大,写入性能会下降;
2、对WHERE子句中频繁使用的建立索引;
3、尽可能使用唯一索引,重复值越少,索引效果越强;
4、使用短索引,如果char(255)太大,应该给它指定一个前缀长度,大部分情况下前10位或20位值基本是唯一的,那么就不要对整个列进行索引;
5、充分利用左前缀,这是针对复合索引,因为WHERE语句如果有AND并列,只能识别一个索引(获取记录最少的那个),索引需要使用复合索引,那么应该将WHERE最频繁的放置在左边;
6、索引存在,如果没有满足使用原则,也会导致索引无效;
三、什么情况下索引会失效
1、如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引;
2、对于多列索引,不是使用的第一部分,则不会使用索引;
3、like查询是以%开头(出现率肥肠高);
4、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引;
5、如果mysql估计使用全表扫描要比使用索引快,则不使用索引;
6、对索引字端做函数操作;
7、字符串和数字对比造成隐性转换;
8、字符集隐性转换;(所以一定要统一字符集)
查看索引的使用情况:
show status like 'Handler_read%';
一些索引经常出现的面试题:
问:一个联合索引ABC,此时AC,和BC 是否能命中为什么?
答:AC可以,BC不能,因为联合索引中使用了最左前缀原则
问:那么什么是最左前缀原则,原理是什么?(一般会一直问到你瓶(meng)颈(bi)为止)
未完待续
本文为Elkan原创文章,转载无需和我联系,但请注明来自Elkan的小破站https://elkan.cn
最新评论