sql 语句的优化

 

  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 通常在这之间,要将不必要的数据过滤掉。

  

 

猜你喜欢

转载自www.cnblogs.com/chengyangyang/p/9777877.html
今日推荐