单表
- 尽量查询的字段按照顺序在索引中都可以匹配到(尽量多使用索引,复合索引要充分利用)
- 最前缀原则:过滤条件要使用索引必须按照索引建立时从左的顺序, 依次满足, 一旦跳过某个字段, 索引后面的字段都无法被使用
- 索引列不能做函数参数 或者 是表达式的一部分(不能计算)
- 索引列不能进行隐藏式类型转换
- 尽量索引覆盖:查询列和索引列一致, 不要写 select *
- 字段可以为空时,is not null 用不到索引, is null 可以用到索引
- mysql 在使用不等于(!= 或者<>)时, 有时会无法使用索引会导致全表扫描
- 索引列上不能有范围查询。范围查询后的索引列,后面的索引列会失效,建议将可能做范围查询的字段的索引顺序放在最后
- like
- like '%...' 索引会失效。用索引覆盖可以解决问题,索引覆盖后,索引不会失效
- like '...%' 索引不会失效
- 减少使用or,用union代替
多表
- 关联查询时, 只有在被驱动表上建立索引才有效!大表上建索引,数据查的快
- 小表驱动大表,小表左边,大表右边(用left join时)
- 小表驱动大表,大表左边,小表右边(用right join时)
- inner join 时,mysql会自己帮你把小结果集的表选为驱动表,大结果集选为被驱动表
- 能够直接多表关联的尽量直接关联, 不用子查询!
posted @
2020-08-30 14:02
队长别开枪 是我
阅读(
316)
评论()
编辑
收藏
举报