sql语句的优化:在大多数情况下,为了更快的遍历表结构,优化器主要是根据定义的索引来提高性能。但是在不合理的SQL语句中,优化器会删去索引进而使用全表扫描,
一般而言,这种sql被称为劣质sql,所以我们在编写的过程中,要注意哪种类型的sql会导致优化器失去作用。
一、操作符的优化
1. IN 操作符 或者not in(IN => exists [])
(
使用in写出的sql语句比较容易以及清晰易懂,但是效率比较低,Oracle查询的过程中,一般会试图将其转化成多个表的连接,
如果转化不成功则先执行in里面的子查询,再查询外层的表查询,由此可见在使用in的sql至少多了一个转化的过程。在业务密集
的sql中,尽量使用exists 代替in。exists一般后面是查询语句。not in ,not exists
)
2. is null 或者 is not null 操作符(用替代法进行代替,如改为a > 0或者a > '')
(
判断字符为空一般是不用索引的,不能用null作为索引,所有不推荐使用上面的方式。
)
3. > < 操作符之间的区别,尽量使用>=或者<=
(
之间的区别是:比如 a>2 时,会先执行a = 2时的数据索引,而携程 a >=3 就是找=3的索引
)
4.like 操作符推荐使用'abc%'。
(
使用‘%abc%’ 是不会引用索引的。而使用‘abc%’是能够引用索引的。
)
5.操作符union ,使用union all 进行替换。
(
因为union 是会对结果进行排序的。
)
6.采用连接符,也会索引也会失去作用。
7.order by 的使用,当order by 的字段在where 语句中,是不会出现排序操作的,所以尽量使用这个方法。
二、sql书写的影响
1. 一般来说,查询条件数量的多的条件都放在后面。
2.不要再条件的列的上面进行运算。
3.使用union all 代替or 一般用于索引列。
4.使用in 来替换or。
5.使用order by 通常在这之间,要将不必要的数据过滤掉。