唯一の単一の列がWHERE句であるとき、SQL Serverは、複合インデックスを使用するのでしょうか?
-
19-09-2019 - |
質問
私はテーブルを持って言ってます:
CREATE TABLE Users (
Id INT IDENTITY (1, 1),
FirstName VARCHAR(40),
LastName VARCHAR(40)
)
クエリは、通常はオンになっているの姓またはの姓の、だけでなく、の姓の上のとのの姓。
私は上の非クラスタ化の姓の上のインデックスと他を作成する場合は、姓は、その後、私の最初の2つのクエリをご用意しています。どうやら、SQL Serverは、他のクエリのためにインデックス交差点を使用します。
私は、(姓)にして(姓、姓)にindexeesを持っている/ SQL Serverは上のクエリのための第二のインデックスを使用しないことができるかどうかまた、単にの姓のと同様に、両方のクエリを<? / P>
SQL Serverのストアの複合インデックスの部分は、左から右または右から左のでしょうか?言い換えれば、それはLastNameFirstNameまたはFirstNameLastNameなどのキーを構築するのだろうか?それとも、それは自由な任意いずれかを選択するのですか?
解決
/ SQL Serverがちょうど姓に対するクエリだけでなく、両方のクエリのためのインデックス(姓、姓)を使用しないことができますか?
はい、データベースは、氏名の問合せのインデックス(氏名、姓)を使用します。それは意志のありませんのものののみ姓にクエリにこのインデックスを使用します。
ないこと店の複合インデックスパーツ左から右または右から左に?
ストレージは Bツリーのです。あなたは、保存されていると考えるかどうかを右から左または左から右にあるだけで便利な視覚化支援、および実際のデータストレージに関連していない。
他のヒント
はい、あなたは姓のみに照会する場合には(姓、姓)インデックスを使用する必要があります。だから、それが使用される両方一緒に姓のみ、または姓と姓で照会するときます。
一般的なガイドラインは、最大の選択性で列を確保することである、これは最大の利益を提供して複合インデックスの最初に表示される/以下、選択性の低い列の前にダウン早く結果セットを狭めます。
あなたが送っている実際のクエリに応じて、2列の複合インデックスは、あなたが唯一の第二列を検索しても使用することができます。ただし、インデックスが求めるが、最も可能性の高いインデックス・スキャン取得することはできません。これはあなたのために「十分」である場合は、特定の環境に依存します。インデックスは、科学と異なる多くの要因がどのようにインデックステーブルをonにあなたの決定に影響を与えるよりも、芸術の詳細です。それはあまりにもいくつかあると同じくらい悪いですいつもテーブルの上にあまりにも多くのインデックスを持つようなトレードオフです。あなたの最も重要なクエリがうまくカバーし、任意の追加のインデックスは、そのコストの価値があるかどうかをケースバイケースで決定されていることを確認します。
また、それはまだ言及して提供されていないとして、あなたは、SQL Server 2005の上に、少なくともしている:私は非クラスタ化インデックスのINCLUDE句で投げてみましょう。これは、任意のインデックス戦略を見落とし、本当に有用な付加である。