0

次の列を持つテーブルがあります

Id         (int)
UniqueId   (string)
CategoryId (int)

Id と UniqueId は、レコードごとに一意です。

値に基づいてレコードを検索したいのですが、値UniqueIdも持っていCategoryIdます。

ステートメントで両方のフィルターを指定する方が高速ですかSELECT。たとえば、次のようになります。

SELECT * FROM [Products] Where [UniqueId] = 'product' AND [CategoryId] = 4

それとも、[UniqueId]フィルターを使用する必要がありますか?

テーブルには多くのレコードがあります

編集 :

[Id]商品の欄がありません

4

7 に答える 7

2
于 2012-09-07T06:23:36.767 に答える
2

フィルタリングを高速化するために UniqueId にインデックスを付けることを忘れないでください。

フィルタリングしたい列にインデックスを付けることを好みます(where句で使用)。

于 2012-09-07T06:21:46.943 に答える
0

初めに

プルしたい列だけをプルする

[CategoryId] にはクラスター インデックスがあると思います。したがって、フィルター [CategoryId] を使用してレコードをプルする必要があります。商品フィルターを使用しない

あなたのクエリは

SELECT * FROM [Products] Where  [CategoryId] = 4
于 2012-09-07T06:26:29.687 に答える
0

インデックスが作成されている列でフィルター処理する方が速いと思います。

また、両方にインデックスが付けられている場合は、列フィルターごとにサーバーが処理を行う必要があり、時間がかかるため、1 つの列のみでフィルター処理する方が高速だと思います。

于 2012-09-07T06:17:29.937 に答える
0

uniqueid に非クラスター化インデックスを作成し、そのフィールドをフィルターとして使用することをお勧めします

于 2012-09-07T06:18:39.397 に答える
0

インデックスがない場合は、

SELECT * 
FROM [Products] 
WHERE [UniqueId] = 'product' 

いずれかの列に索引がある場合は、where句でその列を使用します。

両方にインデックスがUniqueIdありCategoryId、クエリがある場合

SELECT * 
FROM [Products] 
WHERE [UniqueId] = 'product' AND [CategoryId] = 4

結構です

于 2012-09-07T06:19:51.283 に答える
0

でフィルタリングするだけUniqueidです。一意のインデックスが最速の並べ替えを提供するため (O=log2N)、SQL サーバーは他の列を調べません。

于 2012-09-07T06:22:05.853 に答える