1.最左前缀法则
若索引了多列,即使用了联合索引,则必须要遵守该法则,指的是查询索引的最左列必须存在,并且不跳过索引中的任何一列,若跳过了某一列,则该列后面的索引字段全部失效。
查询使用的索引,位置顺序不重要,重要的是是否跳过?最左列的字段是否存在?
2.范围查询
解决方法:允许的话把大于,小于改为大于等于或小于等于即可
3.索引列上使用运算操作导致索引失效
4.字符串忘记添加单引号导致索引失效
5.仅仅是尾部模糊匹配,索引不会失效,但若是头部模糊匹配,则索引将会失效
6.用关键字 or 分隔的条件,若or前的列有索引,后面没有索引,则所有索引都不会被使用
7.当MySQL认为全表扫描比使用索引更快,则不会使用索引。
8.SQL提示,在表名后加上use(ignore,force) 和 index(索引名)
use:让MySQL使用该索引,但MySQL可以不使用
ignore:让MySQL忽略该索引
force:强制MySQL使用该索引
9.使用覆盖索引,避免使用 select * ,查询使用了索引,并且需要返回的列
即查询的列中尽量是建立了索引的列,且需要的数据在索引列中都能找到
10.前缀索引
语法:create index idx_xxx on table_name(column(n)) //n为前缀长度
11.单列索引和联合索引,存在多个查询条件时,推荐使用联合索引,创建联合索引时要考虑顺序,因为最左前缀法则的存在。
12.索引的设计原则