【发布时间】:2012-09-03 12:18:59
【问题描述】:
我正在 SQLSERVER 2008 上运行查询。处理该查询需要 4 秒。我不明白为什么要花这么长时间。
SELECT tbl_Operations.Workcenter
,SUM(tbl_Used_Components.Used_Quantity) as CNF_TODAY
FROM tbl_Used_Components
JOIN tbl_Pack_Division on tbl_Pack_Division.Pack_Division_ID =
tbl_Used_Components.Pack_Division_ID
JOIN tbl_Operations on tbl_Operations.Operation_ID = tbl_Pack_Division.Operation_ID
where CONVERT(date, tbl_Pack_Division.Stop_Time) = CONVERT(date, getdate())
AND tbl_Pack_Division.Memo = 'NORMAL'
and tbl_Pack_Division.Status = 'CNF_MACH'
GROUP BY tbl_Operations.Workcenter
问题出在 where 子句中。当我运行没有 Where 子句的查询时,它会在 0.1 秒内运行。当我添加前 2 个参数时,它仍然运行良好。但是当我在 Status-field 上添加第三个参数时,它出错了。
这怎么可能是个问题?它是与第二个(备忘录字段)粒度相同的选择。
编辑:
Status varchar(10) -- 可以有 5 个不同的值
备忘录 varchar(150)
仅索引:Pack_Division_ID bigint
【问题讨论】:
-
1:您能发布相关字段的表定义吗? 2:你的表有索引吗?
-
可能服务器认为扫描比书签查找两个字段更好。请发布执行计划。
-
我可以做出一些猜测,但正如 GSerg 所说,发布执行计划。使用 Explain 为查询添加前缀执行它,然后将输出添加到您的问题中。
-
首先查看执行计划和索引。您可以使用带有执行计划的 SQL Tuning Wizard 来获得一些免费建议
-
XML 是最好的格式。
tbl_Used_Components上估计的 1 次扫描和实际 510 肯定没有帮助!
标签: sql sql-server-2008 where-clause database-performance