【问题标题】:T-SQL query plan to help choose best form of query?帮助选择最佳查询形式的 T-SQL 查询计划?
【发布时间】:2009-12-09 00:41:09
【问题描述】:

我有一个简单的数据记录表,其中包含两个数据列 A 和 B,我想为其生成 A+B 的总和。但是,A 和 B 中的一个或两个都可以为空。该表还有一个时间戳列,它是主键

我可以看到几种给这只猫剥皮的方法,但我很想知道在一系列时间戳上汇总数据的首选方法是什么:

1. SUM(Coalesce(A,0)+Coalesce(B,0))

2. SUM(Coalesce(A+B,A,B,0))

3. Coalesce( Sum(A), 0) + Coalesce( SUM(B), 0)

我从 Execution planner 得到以下结果:

Form Select Compute Scalar Stream Aggregate Compute Scaler Clustered Index Seek 1 0% 0% 11% 1% 87% 2 0% 0% 11% 1% 87% Form Select Compute Scalar Compute Scaler Stream Aggregate Clustered Index Seek 3 0% 0% 0% 12% 88%

我以前从未深入研究过查询计划,所以我不确定如何解释这些数字。公平地说,一般来说,总体百分比偏向右侧越多越好吗?让表 3 优于表 1 和表 2?

【问题讨论】:

    标签: tsql sql-execution-plan


    【解决方案1】:

    针对预期情况进行优化。

    在这里,如果 A 和 B 大部分时间都有值,那么 #2 应该做得更好,因为合并将达到第一个值并停止。如果 A 或 B 经常为 NULL,您可能会使用 #1 做得更好。与往常一样,这里的关键是尝试两者并根据实际数据分析实际时间。

    【讨论】:

    • 好的,我可以理解,但是我的查询计划结果告诉我什么,因为它们是在相同的数据上运行的?
    • 这些是生成的预期计划,供查询引擎实际开始运行您的查询之前使用。他们告诉你 sql server 将如何执行你的查询,但不考虑实际时间。您需要查看实际的执行时间。在其他安静的服务器上执行此操作,并执行多次以获得平均值。
    • @Joel .. 所以基本上你是在告诉我,查看这个执行计划不是很有用,唯一真正有意义的决定可以通过在安静的服务器上对真实世界数据运行查询来获得?这对我来说似乎有点不诚实。
    • 没有。执行计划可以帮助您发现明显的瓶颈:表搜索等。当两个计划不同时,它们可以帮助您区分它们。但是当两个查询生成相似的计划时,您需要分析实际时间。
    猜你喜欢
    • 2011-04-04
    • 2023-03-23
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多