---------------------01.查询常用优化方法---------------------------------
分页查询优化:
1. select … from tb limiit 20000, offset 10
改为select …from tb where id > 20000 limit 10 保证往聚簇索引上靠
子查询优化:
1. 禁止使用not in,not exists子查询,改用left join … where b.x is null
改用select ... from a left join b where b.x is null
数据类型不匹配优化:
1.char、int类型不匹配失效:采用了隐式函数,导致索引失效
--------------------------03.索引失效-------------------------------
1.最左匹配原则
where条件中顺序无关,但一定要有联合索引第一个。后面第二个、第三个有没有都行,与之代价就是后面的索引字段无法使用。
2.计算、函数、类型转换导致索引失效
因为索引底层是采用实际字段存储,而函数无法带入到实际存储中,故而必须一个个比较,即全表扫描
char、int类型不匹配失效:采用了隐式函数,导致索引失效。不过实际mybatis中会进行类型强校验,开发中一般不会出现这个问题,不过需要注意一下。
3.范围条件右边索引失效
索引是可以使用范围查询的,也可以使用group, order,但是在联合索引中,采用范围后会使得索引后面字段全失效。解决办法就是把范围查询字段放到索引最后面
4.!=、is not null索引失效:因为需要遍历整个B+树(is null不会导致索引失效)
5.like以%开头会失效,结尾不会。
6.or前后存在非索引的列会导致索引失效:因为非索引列本身就是全表扫描,采用并集更是如此
7.比较数据库字符集编码格式不一样,导致字符转换采用函数导致索引失效,比较数据类型不一样,也会导致索引失效。
任务描述