zoukankan      html  css  js  c++  java
  • sql优化学习(一)

    找到一套好的sql优化视频,地址如下:

    http://www.ppvke.com/10355.html

    p.s. 我在百度搜索半天都是些乱七八糟的东西,我用google搜索后,立刻就发现上面的视频地址,看了一些后,发现蛮有收获的,跟大家分享。

    视频一共十五周,前四周的内容,听完了,也没做练习,权当听故事。从第五周的开始,我发现需要认真听,认真练习。如果时间不充裕,从第五周开始学习也可以。(个人意见)

    1. 绑定变量
    1 select aaa,bbb from ccc where ddd=fff;
    2 select aaa,bbb from ccc where ddd=ggg;

    每条语句都需要进行解析,这里有两条,需要解析2回,有N条,就需要解析N回。每次执行一条sql文,消耗的时间中,解析占了绝大的比例。

    如果把fff 换成 :XXX (XXX可以随意填写) , 这样的话,就只进行一次解析。

    2.脏读、幻读、不可重复读

    具体的含义,我就不写了,别人讲的更清楚,我贴出地址:

    http://blog.sina.com.cn/s/blog_8020e4110101bfc6.html

    3.所有的优化都是从业务开始的

    作为程序员,虽说成天处理代码,但是遇到问题,解决问题的出发点,要先从业务出发。

    4.表分区

    表分区,可以改善查询性能,方便数据管理,方便数据备份恢复。参考地址如下:

    http://www.cnblogs.com/pengineer/p/4393988.html

    我在练习oracle partition这个功能的时候,悲催的发现,oracle只有Enterprise edition这个版本中才paritition。。。

    郁闷!暂时无法练习尝试了!

    5.ROWID & ROWNUM

    ROWNUM指的是表中的行数,第一行,第二行,.ect  而ROWID是在指明这条数据在磁盘中位置的物理地址。更详细的请参考如下链接:

    http://www.dba-oracle.com/t_rownum_rowid_difference.htm

    6.UNION & UNION ALL

    两者都是合并结果集,不同在于,前者是去掉重复值,后者是不去掉重复值。

    因为UNION在运行时,要去掉重复值,机制中,它会排序去重,所以花费的时间多,所以优化时可通过业务上分析,如果两个结果集不存在重复值,那么合并的时候就应该选择UNION ALL。这也是优化的一个案例。

    7.COUNT

    我相信有时需要查看这个表中,是否有数据,所以sql就会写成,select count(1) from table;

    表中数据多时,这样就会造成时间的浪费,我们不需要知道有多少条数据,只要清楚里面是否有数据,所以sql优化成下面的这个样子:

    select count(1) from table where rownum = 1;

    这样,只检查第一条是否有就可以,第一条有,那么这表就有数据。

    8.DISTINCT

    去重功能,少用,因为去重,会产生排序,会消耗大量时间。

    9.MAX & MIN

    select max_class, min_class from
    (select max(CLASS_ID) max_class from student),
    (select min(CLASS_ID) min_class from student);

    同时查询最大值和最小值时,写成如上sql,因为当查询最大值或最小值时,当有索引的前提下,执行计划不要要全表查询,逻辑读只需要两次就可以查到了。但是同时出现时,就会进行全表扫描,因此,写成上面的sql,可以避免全表扫描,提高查询效率。

    这篇就写到这里,不会的太多,坚持学习,加油!



  • 相关阅读:
    Spring Boot中只能有一个WebMvcConfigurationSupport配置类
    【原创】(六)Linux进程调度-实时调度器
    【原创】(二)Linux进程调度器-CPU负载
    【原创】(十二)Linux内存管理之vmap与vmalloc
    【原创】(十一)Linux内存管理slub分配器
    【原创】(七)Linux内存管理
    【原创】(五)Linux内存管理zone_sizes_init
    【原创】(三)Linux paging_init解析
    【原创】(二)Linux物理内存初始化
    【原创】(一)ARMv8 MMU及Linux页表映射
  • 原文地址:https://www.cnblogs.com/lihao007/p/6876080.html
Copyright © 2011-2022 走看看