私は次の2つのクエリを持っています。私は3つのインデックススキャン(2つ目)を使うのではなく、より効率的だと考えています。また、2番目のクエリに含まれる3つのカウントから1つのカウントを取得するにはどうすればよいですか?どうすれば1つにまとめることができますか?どちらのクエリがより効率的ですか?
最初のクエリ
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
2番目のクエリ
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
[OK]を、これは
まず(シングル '設定統計が上ioを' で、私は両方のクエリを実行した後に私が思い付いた結果であり、行)クエリ:
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
2番目のクエリ:
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 < 76703と比較しますか?だから最初のものはそれがより効率的に実行されていることを意味していますか?
どのDBMSを使用していますか?各クエリの実行計画を確認しましたか? –
また、これらのクエリは2つの異なることを行います。あなたのすべての基準に一致するレコードの数を取得しようとしていますか? –
データベースはSQL Server 2005 – dido