单表查询要点概述
1、背景
前面大体上讲诉了单表查询的一些常规优化思路和改写。现做一个小结。
2、单表查询注意事项
2.1 如何创建合适的索引
- Where条件中有过滤性较好的条件,适合创建索引。假设过滤条件基本上过滤出来的数据是全表的范围,此时创建索引反而增加回表开销。
- 过滤性最好的(即过滤出少量数据的)查询条件为索引的前导列,因为从索引第一列开始就能够快速缩减扫描范围,效率更高。
- 等值条件在前,范围条件在后,多个范围条件只能一个走索引
- 一般创建的索引为global,分区表索引创建建议加global
- 位图索引适合重复率较高,数据变动极少的场景
2.2 不要用select *
当查询的表是宽表时,select *查询的是表的所有列,有些不必要的列查询会带来更多的性能消耗。
2.3 模糊匹配尽量用通配符在后面的方式
Like ?||‘%’因为前面是能够定位到范围,能够减少扫描范围,假设通配符在前,相当于前面的数据是未知的,即要扫描匹配后才能确定范围,这就是为啥慢的原因
2.4 语句的执行顺序
遵循先过滤后分组的顺序。像前面讲的where和having的区别。