zoukankan      html  css  js  c++  java
  • 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;

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

    (04)删除所有记录都得时候,用TRUNCATE替代DELETE

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

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

    (05)尽量多使用COMMIT
            因为COMMIT会释放回滚点 callback

    (06)用WHERE子句替换HAVING子句
              WHERE先执行,HAVING后执行

    因为having会先分组,比较占内存.

    (07)多使用内部函数提高SQL效率

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


    (08)表明过长时,尽量使用表的别名
        例如 salgrade s   长表名更加的耗费扫描时间

    (09)使用列的别名
      例如 :ename e  同表名

  • 相关阅读:
    linux下区分各种SCSI磁盘类型
    Linux那些事儿之我是SCSI硬盘(3)磁盘磁盘你动起来!
    待机(STR)suspend device flow
    %pf
    ftrace misc
    reboot系统调用的时候会调用shutdown函数
    Linux进程调度
    一张图让你读懂Linux内核运行原理
    linux O1 and CFS process sched
    SQL 视图 触发器 等
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/6775478.html
Copyright © 2011-2022 走看看