作家
登录

如何编写更好的SQL查询

作者: 来源: 2017-09-08 08:57:49 阅读 我要评论

rows=1000000 width=37) 
  • (actual time=0.015..1207.019 rows=1000000 loops=1) 
  • Total runtime: 2320.146 ms 
  • (2 rows) 
  • 应用 EXPLAIN ANALYZE 的缺点就是须要实际履行萌芽,这点值得留意!

    到今朝为止,我们看到的所有算法是次序扫描或全表扫描:这是一种在数据库长进行扫描的办法,扫描的表的每一行都是以次序(串行)的次序进行攫取,每一列都邑检查是否相符前提。在机能方面,次序扫描不是最佳的履行筹划,因为须要扫描全部表。然则如不雅应用慢磁盘,次序攫取也会很快。

    1. EXPLAIN ANALYZE 
    2. SELECT * 
    3. FROM one_million JOIN half_million 
    4. ON (one_million.counter=half_million.counter); 
    5. QUERY PLAN 
    6. _____________________________________________________________ 
    7. Hash Join (cost=15417.00..68831.00 rows=500000 width=42) 
    8. (actual time=1241.471..5912.553 rows=500000 loops=1) 
    9. Hash Cond: (one_million.counter = half_million.counter) 
    10.     -> Seq Scan on one_million 
    11.     (cost=0.00..18334.00 rows=1000000 width=37) 
    12.     (actual time=0.007..1254.027 rows=1000000 loops=1) 
    13.     -> Hash (cost=7213.00..7213.00 rows=500000 width=5) 
    14.     (actual time=1241.251..1241.251 rows=500000 loops=1) 
    15.     Buckets: 4096 Batches: 16 Memory Usage: 770kB 
    16.     -> Seq Scan on half_million 
    17.     (cost=0.00..7213.00 rows=500000 width=5) 
    18. (actual time=0.008..601.128 rows=500000 loops=1) 
    19. Total runtime: 6468.337 ms  

    我们可以看到萌芽优化器选择了 Hash Join。请记住这个操作,因为我们须要应用这个来评估萌芽的时光复杂度。我们留意到了膳绫擎示例中没有 half_million.counter 索引,我们可以鄙人面示例中添加索引 :

    还有一些其它算法的示例:

    1. CREATE INDEX ON half_million(counter); 
    2. EXPLAIN ANALYZE 
    3. SELECT * 
    4. FROM one_million JOIN half_million 
    5. ON (one_million.counter=half_million.counter); 
    6. QUERY PLAN 
    7. ______________________________________________________________ 
    8. Merge Join (cost=4.12..37650.65 rows=500000 width=42) 
    9. (actual time=0.033..3272.940 rows=500000 loops=1) 
    10. Merge Cond: (one_million.counter = half_million.counter) 

        推荐阅读

        Oracle Advanced Support系统SQL注入漏洞挖掘经验分享

      我们可以对这个应用开端进行一些简单的┞缝查,包含: 寻找已经被爆出的马脚 用burp爬取应用 列举常见的路径 查看可获取的页面的源码荣幸的是,我在主页的源码中发清楚明了 一>>>详细阅读


      本文标题:如何编写更好的SQL查询

      地址:http://www.17bianji.com/lsqh/37237.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)