zoukankan      html  css  js  c++  java
  • 开发日记(项目中SQL查询的优化)

    今天发现自己之前写的一些SQL查询在执行效率方面非常不理想,于是尝试做了些改进。

    需求为查询国地税表和税源表中,国税有而税源没有的条目数,之前的查询如下:

    SELECT COUNT(NAME)
           FROM(SELECT TAX_INFO_GD.NAME,
                        TAX_INFO.NSR,
                        TAX_INFO_GD.SH_ID,
                        TAX_INFO.SHXYDM,
                        TAX_INFO_GD.SYLX,
                        TAX_INFO_GD.JDXZ,
                        TAX_INFO_GD.STATE GDSTATE
                   FROM TAX_INFO_GD
                   LEFT JOIN TAX_INFO
                     ON TAX_INFO_GD.NAME = TAX_INFO.NSR
                    OR TAX_INFO_GD.SH_ID = TAX_INFO.SHXYDM)
          WHERE NSR is null
            and SHXYDM is null
            and (SYLX = 2 OR SYLX = 3)
            and GDSTATE='正常';

    改进过后的代码:

    SELECT COUNT(*)
         FROM TAX_INFO_GD B
         WHERE (SELECT COUNT(1) ASnum
               FROM TAX_INFO A
              WHERE A.NSR = B.NAME
                AND A.SHXYDM = B.SH_ID) = 0
        AND B.STATE = '正常'
        AND (B.SYLX = '2' OR B.SYLX = '3');

    两段查询语句查询出的结果是一样的

    第一种查询思路是先将国地税表和税源表做左链接,这也就意味着形成的临时表是以国地税表为主体,将税源表所有字段横向追加到国地税表中的一张大表,比国地税表的字段数量更多。在形成这张临时表之后再做一次符合条件的查询。

    而第二种查询方式的主体思路是先在一张表中筛选,筛选出的数据就是另外一张表的查询条件。

    这里只有结果,不做结论,因为orcale内部是何种数据结构如何运行我不得而知,贸然的主观猜测可能会误人子弟。

  • 相关阅读:
    函数part1 初始函数
    文件操作 文件修改的两种方式
    文件操作part3 文件内指针的移动
    文件操作part2
    day08作业
    文件操作part1
    字符编码
    ORA-15124 数据库启动阶段报错
    将数据库从普通文件系统迁移到ASM中
    在ASM中移动数据文件
  • 原文地址:https://www.cnblogs.com/firstdream/p/7528198.html
Copyright © 2011-2022 走看看