【发布时间】:2011-06-23 20:19:41
【问题描述】:
我有一个存储过程,可以加入许多表并从中选择字段。其中一张表是临时表。
SELECT
a.Field1,
a.Field2,
b.Field3,
b.Field4,
c.Field5
FROM table1 a
LEFT JOIN #table2 b ON a.Field1 = b.Field1
INNER JOIN table3 c ON a.Field1 = c.Field1
以上操作需要 10 多分钟,但是如果我从选择中注释掉两个 b 字段,同时保留连接,它只需几秒钟即可运行。
我已将其从程序中删除以简化和相同的行为。执行计划也几乎相同。
感谢任何帮助。
【问题讨论】:
-
这两个字段的数据类型是什么?
-
char(1)。它们是“Y”或“N”。 -
嗯,这让我的理论认为它们是宽领域,因此需要更长的时间来传递数据。但它确实解释了为什么索引可能没有帮助,没有足够的特异性。
-
你看的是实际的执行计划还是只是估计的?
-
实际上,对不相关的表进行了几次索引扫描,当这些字段被注释掉时也会出现。
标签: sql performance sql-server-2005 sql-execution-plan