index使用基本原则

单表

  • 尽量查询的字段按照顺序在索引中都可以匹配到(尽量多使用索引,复合索引要充分利用)
  • 最前缀原则:过滤条件要使用索引必须按照索引建立时从左的顺序, 依次满足, 一旦跳过某个字段, 索引后面的字段都无法被使用
  • 索引列不能做函数参数 或者 是表达式的一部分(不能计算)
  • 索引列不能进行隐藏式类型转换
  • 尽量索引覆盖:查询列和索引列一致, 不要写 select *
  • 字段可以为空时,is not null 用不到索引, is null 可以用到索引
  • mysql 在使用不等于(!= 或者<>)时, 有时会无法使用索引会导致全表扫描
  • 索引列上不能有范围查询。范围查询后的索引列,后面的索引列会失效,建议将可能做范围查询的字段的索引顺序放在最后
  • like
    • like '%...' 索引会失效。用索引覆盖可以解决问题,索引覆盖后,索引不会失效
    • like '...%' 索引不会失效
  • 减少使用or,用union代替

多表

  • 关联查询时, 只有在被驱动表上建立索引才有效!大表上建索引,数据查的快
  • 小表驱动大表,小表左边,大表右边(用left join时)
  • 小表驱动大表,大表左边,小表右边(用right join时)
  • inner join 时,mysql会自己帮你把小结果集的表选为驱动表,大结果集选为被驱动表
  • 能够直接多表关联的尽量直接关联, 不用子查询!
原文地址:https://www.cnblogs.com/wasitututu/p/13585157.html