【发布时间】:2012-04-11 06:21:32
【问题描述】:
我有以下两个查询,我相信使用三个索引扫描(第二个)而不是完整的一个更有效,但我需要更多意见。另外,如何从第二个查询中的三个计数中获得一个计数?我怎样才能将它们合二为一?
第一次查询
SELECT count(*) FROM bldng
WHERE (bldng_type LIKE '%PTR%' OR bldng_type LIKE '%FACILITY-A%'
OR bldng_type LIKE '%FACILITY-B%') AND area_sqf > 500
第二次查询
SELECT count(*) FROM bldng WHERE bldng_type LIKE '%PTR%' AND area_sqf > 500
UNION ALL
SELECT count(*) FROM bldng WHERE bldng_type LIKE '%FACILITY-A%' AND area_sqf > 500
UNION ALL
SELECT count(*) FROM bldng WHERE bldng_type LIKE '%FACILITY-B%' AND area_sqf > 500
好的,这是我在使用“set statistics io on”运行两个查询后得出的结果
第一个(单行)查询:
Category Timestamp Duration Message Line Position
Connection 3/27/2012 2:36:49 PM 3615: Table 'bldng'. Scan count 1, logical reads 33320, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 1 0
第二次查询:
Category Timestamp Duration Message Line Position
Connection 3/27/2012 2:38:15 PM 3615: Table 'bldng'. Scan count 15, logical reads 76703, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 1 0
Category Timestamp Duration Message Line Position
Connection 3/27/2012 2:38:15 PM 3615: Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 1 0
我不知道如何解释这些。我是否比较逻辑读取 33320
【问题讨论】:
-
您使用的是什么 DBMS?您是否查看过每个查询的执行计划?
-
此外,这些查询做了两件不同的事情。您是否尝试获取符合所有条件的记录数?
-
是的,对不起,纠正了第一个错误。添加了“计数”
-
@dido 他们仍然是 2 个不同的结果集。你是不是也想把
GROUP BY bldng_type加到第一个? -
嗯,但是当我执行这两个语句时,它们似乎给了我相同的结果。你能详细说明有什么区别吗?不,我并不是要“分组”。但是你为什么问?这有帮助吗?你认为我为什么需要它?
标签: sql select sql-server-2005