1.加索引/复合索引 当where使用到复合索引时 语句必须包含前置列(首列)索引即生效,
索引并非越多越好,增删改DML语句效率随索引数量降低,建议单表至多6列索引
2.避免使用<>、!=、is null 可以给字段添加默认值0 对0进行判断
3.避免使用in,如in中为连续数值 可使用 between 代替,如in中为子查询可使用 exists 代替
4.避免使用or,可使用 union 代替 or ,union 和 union all 的区别为 union 默认使用去重 distinct+order by 默认排序
5.避免使用like,尽量在字段后面使用模糊查询,使用 like 做为条件时 '条件%' 索引有效 '%条件%' 索引无效
6.避免使用表达式、函数包裹where中索引字段导致索引失效
7.隐式类型转换造成不使用索引 如 varchar=123
8.order by 、group by、union、distinct 等表达式要与where中条件一致 否则不会利用索引进行排序、分组、并集、去重
9.避免出现select * ,提出业务实际列数
10.多表关联查询时,大表在前,小表在后,执行from后的表关联执行顺序oracle为从右至左(mysql相反)
11.使用表别名于列前缀减少解析时间并减少友列名歧义引起的语法错误
12.根据自上而下的顺序解析where子句,应将过滤数据多的条件往前放,最快速度缩小结果集。