Mysql查询优化
1. 添加索引遵守、最左前缀法则:
-
如果建立的是复合索引,索引的顺序要按照建立时的顺序,即从左到右,如:a->b->c(和B+树的数据结构有关)
-
无效索引举例:
- a->c: a有效i, c无效
- b->c: b、c 都无效
- c: 无效
- 以下用法会导致索引失效:
- 计算,如:+、-,*、/、!=、<>、is null、 is not null、or
- 函数,如:sum()、round()等等
- 手动、自动类型转换, 如:id=“1”, 本来是数字,给写成字符串了
2. 索引不要放在范围查找的右边:
- 比如:复合索引:a->b->c, 当where a=" " and b>10 and 3="", 这时候只能用到 a 和 b, c 用不到索引,因为在范围之后索引都会失效(和 B+树结构有关)
3. 减少select*的使用:
- 使用覆盖索引:
即:select 查询字段和where中使用的索引字段一致
4. like导致索引失效:
- 失效情况:
- like “%张三%”
- like “%张三”
- 解决方案:
- 使用复合索引,即like字段是select的查询字段,如:select name from table where name like “%张三%”
- 使用 like “张三%”
5. order by 优化:
- 使用主键索引
- 按照最左侧前缀法则,并使用覆盖索引排序,多个字段排序时,保持排序方向一致
- 在SQL语句中强制制定使用某索引,force index(索引名字)
- 不在数据库中排序,在代码层面排序

浙公网安备 33010602011771号