私は後で私を悩ませているSQL Serverのインデックスについてこの質問があります。ノンクラスタード・インデックスでは、2番目、3番目、4番目...の列はどのようにソートされますか?
CREATE NONCLUSTERED INDEX IX_LastName ON TelephoneBook (
LastName,
FirstName,
PhoneNumber
)
と、このテーブルは、行の数十万人を持っていることを想像:このようなインデックスを持つ
CREATE TABLE TelephoneBook (
FirstName nvarchar(50),
LastName nvarchar(50),
PhoneNumber nvarchar(50)
)
:
は、このようなテーブルを想像してみてください。
私は、姓がBで始まり、ファーストネームが「John」であるすべての人を選択したいとしましょう。インデックスは、我々はとにかくBで始まるLastNamesのすべてのそれためのグループをスキャンする必要がある行の数を減らすのを助けることができるので、それはまたのためにこれを行うん、
SELECT
*
FROM TelephoneBook
WHERE LastName like 'B%'
AND FirstName='John'
:私は、次のクエリを記述しますファーストネーム?または、データベースは、Bで始まるすべての行を検索して、最初の名前が「John」のものを検索しますか?
つまり、2番目、3番目、4番目、...の列はどのようにインデックスにソートされていますか?この場合もアルファベット順ですか?Johannaを見つけるのは簡単ですか?あるいは、彼らはある種のランダムな順序であったり、別の順序で存在したりしていますか?
EDIT:私は上記のSELECTステートメントでこれを読んだだけなので、インデックスは姓がBで始まるレコードへの検索の絞り込みにのみ使用されますが、インデックスはすべての行をJohannaで検索するために使用することはできません(また、すべての 'B'行をスキャンすることになります)。それがなぜあるのだろうか?私は何を得ていないのですか?
小さなテーブルのフルテーブルスキャンは、同じテーブルのクラスタ化されていないインデックスのルックアップよりも安価です。全テーブルのスキャンが悪いので、25行のテーブルでインデックスを強制的に使用する人がいました。クールな答え – Namphibian