在SQL查询中查找未使用的连接

Joh*_*ais 5 sql analysis query-optimization

我目前正在维护大量的SQL查询.其中一些是通过复制/粘贴操作创建的,然后删除不必要的字段,有时忘记删除这些字段来自的表.

我正在寻找一个工具(或除了眼睛+大脑之外的任何东西),在给定SQL查询的情况下,它将分析哪些连接表在SELECT部分​​中没有选择字段.

你知道这样的工具吗?

谢谢

Joe*_*lli 6

仅仅因为SELECT中没有引用任何字段,这并不意味着连接对查询逻辑不重要,并且如果删除连接,结果可能会更改.

请考虑以下简单示例:返回2011年购买商品的所有客户的名称.

SELECT DISTINCT c.CustomerName
    FROM Customer c
        INNER JOIN Sales s
            ON c.CustomerID = s.CustomerID
                AND s.SalesDate >= '2011-01-01'
Run Code Online (Sandbox Code Playgroud)

在SELECT中没有返回Sales表中的列,但是连接对于返回正确的结果集至关重要.

一句话:我认为您需要进行人眼/大脑代码检查才能正确清理.


Con*_*rix 6

假设一个工具可以存在,但只有在满足所述连接的所有以下标准时才能保证它是正确的

  • 它是一个LEFT或OUTER JOIN或INNER JOIN,其中基数已知为1-1和...
  • 它在SELECT,HAVING,GROUP BY或WHERE中没有引用...
  • 具有副作用的功能不是JOIN ......

可能为什么在SQL解析器中没有确定性警告的方式让我们说C#中一个未使用的变量.但是,创建一个查找其中一些条件的SQL检查器并让用户知道这里有可能进行优化可能是值得的.