-2

使用時の違い (パフォーマンス) : A:

SELECT Col1, Col2, Col3, col7 
  FROM xTable  
 WHERE (col1 > 0) 
   AND (col7 >= 0) 
    OR (col2 > 0)
   AND (col7 >= 0) 
    OR (col3 > 0) 
   AND (col7 >= 0)

B:および使用:

SELECT Col1, Col2, Col3, col7
  FROM xTable
 WHERE ( (col1 > 0) OR (col2 > 0) OR (col3 > 0) )
   AND (col7 >= 0)
4

2 に答える 2

0

このテーブルに挑戦する

CREATE TABLE xTable
(
col7 INT PRIMARY KEY,
Col1 INT,
Col2 INT,
Col3 INT
)  

col7 >= Scalar Operator((0))クエリの両方のバージョンは、範囲シークオンと残りの述語を持つ同一の実行プランを提供する[Col1]>(0) OR [Col2]>(0) OR [Col3]>(0)ため、少なくともそのテストでは、パフォーマンスにまったく違いはありません。

于 2012-09-19T14:24:22.747 に答える
0

それらは、すべての意図と目的のために、パフォーマンスが同じです。その余分なナノ秒を取得するには、B の最初に (col7 >= 0) 句を入れてみてください。 いずれにせよ、オプティマイザーはクエリを書き直し/リファクタリングして、同じパフォーマンスになるようにすることができます。

人々が本当にこの種のことを迅速に行おうとするときは、ビットマップ インデックスを使用します。

同等のアプローチは、「ビット」列を生成し、その列にインデックスを付けることですが、それは少し話題から外れています。

于 2012-09-19T14:16:56.057 に答える