Saya membaca ini menggunakan-index-luke.com yang menjelaskan secara rinci bagaimana indeks bekerja. Salah satu hal yang orang ini ulangi adalah bahwa urutan indeks sangat penting dan untuk membuat kueri menjadi cepat, di mana kolom klausa harus sama dengan yang ada di indeks. Hari ini, saya baru saja menguatkan teori ini dan membuat tabel (id int, name nvarchar (100)) pada SQL Server 2008. Saya memasukkan sekitar 5.000 baris di dalamnya dan membuat indeks
create index abc on test (name, id )
dan memecat kueri
select ID, name
from test
where ID = 10
and name = '10'
Saya mengharapkan pemindaian tabel penuh diikuti oleh pilih dalam rencana kueri tetapi mengejutkan saya output dari rencana adalah pemindaian indeks diikuti oleh pilih.
Jadi, pertanyaan saya adalah apakah urutan kolom di mana klausa penting atau apakah SQL Server mengatur ulang mereka sesuai definisi indeks?
Terima kasih !!
sumber
Jawaban:
Tidak. Urutan kolom dalam
WHERE
klausa tidak masalah sama sekali.sumber
Pertama-tama,
DROP
pernyataan di jendela kueri jelas tidak dieksekusi, tetapi demi penjelasan, saya akan mencoba menjawab apa yang Anda minta.Pikirkan indeks seperti buku telepon Anda: entri diurutkan berdasarkan Nama Belakang, lalu dengan Nama Depan. (Ini adalah urutan kunci indeks .)
Jika saya meminta Anda menemukan semua nomor telepon orang dengan nama belakang "Davis," Anda akan membuka halaman yang sesuai, dan membacakan nomornya. (Ini adalah pencarian indeks .)
Jika saya meminta Anda menemukan semua nomor telepon orang dengan nama depan "Janice," Anda harus melihat setiap halaman untuk menemukan semuanya. (Ini adalah pemindaian indeks .)
Jika saya memberi Anda nama depan dan nama belakang, Anda akan dapat menemukan entri itu dengan sangat cepat, seperti contoh pertama, karena jelas Anda akan menggunakan nama belakang untuk menemukan halaman yang tepat, maka nama depan untuk temukan entri yang tepat. Tidak masalah urutan mana yang saya berikan informasi, selama saya memberi Anda nama depan dan nama belakang.
Pengoptimal kueri SQL Server bekerja dengan cara yang sama. Berdasarkan urutan kunci indeks, secara otomatis menentukan cara paling efisien untuk mengambil data yang Anda minta, terlepas dari urutan kondisi dalam
WHERE
klausa.sumber
Urutan kolom pada masalah indeks tetapi tidak dalam urutan nilai anded pada
where
klausa.sumber