Haruskah urutan kolom di mana klausa sama dengan urutan indeks?

8

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. Rencana kueri

Jadi, pertanyaan saya adalah apakah urutan kolom di mana klausa penting atau apakah SQL Server mengatur ulang mereka sesuai definisi indeks?

Terima kasih !!

Egaliter
sumber
3
Bukankah rencana eksekusi dari Anda menguji menjawab pertanyaan?
ypercubeᵀᴹ
Iya !! Tapi saya ingin pendapat ahli dan dalam kasus ini bisa gagal. Terima kasih !!
Egaliter
1
Pertanyaan serupa untuk MySQL: Di MySQL, apakah urutan kolom dalam klausa WHERE memengaruhi kinerja kueri? Pengoptimal SQL-Server beberapa tingkat lebih tinggi dari yang MySQL.
ypercubeᵀᴹ

Jawaban:

13

Jadi, pertanyaan saya adalah apakah urutan kolom di mana klausa penting

Tidak. Urutan kolom dalam WHEREklausa tidak masalah sama sekali.

seekor kuda tanpa nama
sumber
10

Pertama-tama, DROPpernyataan 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 WHEREklausa.

Jon Seigel
sumber
Penjelasan hebat tentang pemindaian indeks dan pencarian indeks.
Neelam
0

Urutan kolom pada masalah indeks tetapi tidak dalam urutan nilai anded pada whereklausa.

Gaston Sanchez
sumber