admin

* 的用法是合理的吗?

sql

我一直向我的开发人员宣扬ELECT *evil ,应该像瘟疫一样避免。

是否有任何可以证明其合理性的案例?

我不是在谈论COUNT(*)- 大多数优化器可以弄清楚。

编辑

我说的是生产代码。

我看到的关于这种不良做法的一个很好的例子是select *在存储过程中使用的遗留 asp 应用程序,用于ADO遍历返回的记录,但按索引获取列。您可以想象将新字段添加到字段列表末尾以外的位置时会发生什么。


阅读 141

收藏
2021-06-07

共1个答案

admin

我很高兴*在审计触发器中使用。

在这种情况下,它实际上可以证明是一个好处,因为它将确保如果向基表添加额外的列,它将引发错误,因此不会忘记在审计触发器和/或审计表结构中处理此问题。

(像dotjoe)我也很高兴在派生表和列表表达式中使用它。虽然我习惯性地反过来做。

WITH t
     AS (SELECT *,
                ROW_NUMBER() OVER (ORDER BY a) AS RN
         FROM   foo)
SELECT a,
       b,
       c,
       RN
FROM   t; 

我最熟悉 SQL Server 并且至少优化器没有问题,认识到只a,b,c需要列并且*在内表表达式中使用 不会导致任何不必要的开销检索和丢弃不需要的列。

原则上SELECT *在视图中应该没问题,并且它是SELECT应该避免的视图的最终结果,但是在 SQL Server 中这可能会导致问题,因为它存储视图的列元数据,当基础表更改时不会自动更新*除非sp_refreshview运行来更新此元数据,否则使用可能会导致混淆和不正确的结果。

2021-06-07