MYSQL的索引
Posted 大佬健
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL的索引相关的知识,希望对你有一定的参考价值。
对于建立的索引(姓,名字,data)
5.1、索引对一下的查询类型有效
1、全值匹配:能查找姓+名为ALLEN、出生日期为1990-11-05的人;
2、最左前缀匹配:可以查找姓为ALLEN的人;即只使用索引的第一列;
3、列前缀匹配:可以查找姓为J开头的人;这里索引也只使用了第一列;
4、范围匹配:可以查找姓以开头为A-J的人;这里索引也只使用了第一列;
5、精确匹配前一列,范围匹配后一列;
6、只访问索引的查询;
7、ORDER BY 也满足索引;
5.2、索引的限制
1、没法找到特定名字的人;
2、没法找到以某个J结尾的姓;
3、没法跳过索引,即没有姓A,出生日期为XX的人;
4、范围查询的右边索引失效,例如姓为AX,名字like b% ,出生日期为199-01-01的人,只使用了前两列索引;
5.3 高性能索引策略
1、独立的列,以下SQL失效:selext * from user where id +1 = 10;
2、选择合适的索引列,
3、聚族索引与非聚族索引(innoDB和myisam引擎的区别)
尽量使用自增主键而不是uuid,因为这样会导致数据没有了聚集属性;
4、索引覆盖-如果查询条件中已经包含了要查询的值,那么对于聚族索引而言,就不需要进行二次回查;
例如table 有 (id,name)的联合索引,当sql=select id ,name from table 时,就会触发索引覆盖;
5、多表JOIN时,只有第一个表的ordery by条件能使用索引;
关于order by 的生效和失效条件
对于table有联合唯一索引(a,b,c)
以下索引生效:
where a= x order by b;能使用索引,因为a是常量,而a+b组成的最左前缀索引;
where a >x order by a,b;能使用索引,因为a+b组成了联合索引;
以下索引失效:
where a = x order by b desc,c desc ,因为两个不同的排序方向,但是索引列都是正序排序;
where a =x order by b ,d 使用了一个不在索引中的列;
where a =x ordery c ,a+c没法组合最左前缀组合;
where a > x order by b,c ;失效,a使用了范围查询条件,b,c组合失效;
6、使用In sex来不选择性别,让范围查询的字段(例如age)排到最后;
以上是关于MYSQL的索引的主要内容,如果未能解决你的问题,请参考以下文章