优化WHERE子句
- 多数数据库都是从左往右的顺序处理条件的,把能够过滤更多数据的条件放到前面,把过滤少的条件放在后面
SQL语法优化的一些方法
1.对查询进行优化,应尽量避免全表扫描,首先应考虑where及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。
3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。
4.应尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃索引进行全表扫描(原因如果一个字段有索引一个没有索引将导致执行引擎不使用索引)。可以使用union进行代替。
5.not in也要慎用,否则也会进行全表扫描。改用between…and…
6.使用like “%s”模糊查询会导致进行全表扫描。
7.如果where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。
8.应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。
10.不要在where子句中的“=”左边进行函数、算术运算或者其他表达式的运算,否则系统将无法正确使用索引。