1. 全值匹配我最爱

      1. 有单个索引或多个索引适合,选择能全部匹配上的,而不是单个的。
    2. 最佳左前缀法则

    在写where条件时要想使用联合索引,就必须从左往右写不可跳过,如果跳过索引后面的字段都无法被使用。

    1. 主键插入顺序,依次递增

    如果忽大忽小则会页面分裂,损耗性能。

    1. 计算、函数、类型转换(自动或手动)导致索引失效走全表扫描
    2. 范围条件右边的列索引失效

    在使用联合索引时,如果中间是id>20这种范围的那么右边索引就用不到了。所以设计联合索引的时候,要把设计范围查询的字段放到最后面,联合索引就可以全部用到了。与where条件写的顺序无关。

    1. 不等于( != 或者 <>)索引失效,无法找。
    2. is null 可以使用索引,is not null 无法使用索引,not like 也无法使用索引

    所以设计数据表时候就将字段设置为 NOT NULL 约束,INT类型字段默认值为0,子类类型设置为空字符串。

    1. like以通配符%开头索引失效
    2. OR 前后存在非索引列,索引失效
    3. 数据库**和表的字符集统一使用utf8mb4,如果字符转换则索引失效**

    建议:

    • 对于单列索引,尽量选择针对当前query过滤性更好的索引。
    • 在选择组合索引时候,当前query中过滤性能最好的字段在索引字段顺序中,位置越靠前越好。
    • 在选择组合索引时候,尽量选择能够包含当前query中的where子句中更多字段的索引。
    • 在选择组合索引时候,如果某个字段可能出现范围查询时,尽量把这个字段放在索引次序的最后面。
    • 书写SQL语句,尽量避免造成索引失效的情况。