• SQL优化总结之二


    1.列优先

    如图有表A和表B,对其查询时,会有如下语句:

    select  a.*,b.*
     
    from  a,b
     
    where  a.id = b.a_id;

    注意from 后边的表名,

      a.如果多表查询是完全无关系的话,将记录和列名最少的表(from后靠右的位置接列少的表),写在最后,然后依次类推

      b.如果多表查询是有关系的话,将引用最多的表(from后靠右的位置接列多的表),放在最后,然后依次类推

    这样速度会有所提高。

    2.where子句中的连接顺序(where也采用从右往左解析)

    当使用where子句连接的时候,要将可以过滤掉最大数量记录的条件写在WHERE子句的最右

    例如

    select emp.empno,emp.ename,emp.sal,dept.dname
    from emp,dept
    where (emp.deptno = dept.deptno) and (emp.sal > 1500)

    这样,可以过滤掉大量数据后,在执行其他条件,可以提高效率

    3.减少使用 * 代替列名

    select * from user;

    要写成 select userID ,userName,userSalary  from user;

    因为使用* ,数据库还得查询数据字典,然后解析列名,直接写列名会调高效率。

    4.删除所有记录都得时候,用TRUNCATE替代DELETE

    因为delete删除表时,会扫描整个表,然后再一条一条删除

    而TRUNCATE table user;  是一次性删除整个表的所有内容,会提高效率。

    5.尽量多使用COMMIT

    因为COMMIT会释放回滚点 callback

    6.用WHERE子句替换HAVING子句

    WHERE先执行,HAVING后执行,因为having会先分组,比较占内存。

     

    7.多使用内部函数提高SQL效率

    例如多用concat连接,代替'||' 的符号连接

    8.表名过长时,尽量使用表的别名

    例如 salgrade s   长表名更加的耗费扫描时间

    9.尽量使用列的别名

    例如 :ename e  同表名

  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/Kevin-ZhangCG/p/9164631.html
Copyright © 2020-2023  润新知