Dalam rencana Eksekusi SQL Server, apa perbedaan antara Index Scan dan Index Seek
Saya menggunakan SQL Server 2005.
Jawaban:
Pemindaian indeks adalah tempat SQL server membaca seluruh indeks untuk mencari kecocokan - waktu yang dibutuhkan sebanding dengan ukuran indeks.
Pencarian indeks adalah tempat SQL server menggunakan struktur b-tree dari indeks untuk mencari secara langsung ke rekaman yang cocok (lihat http://mattfleming.com/node/192 untuk mengetahui cara kerjanya) - waktu yang dibutuhkan hanya sebanding dengan jumlah catatan yang cocok.
Aturan dasar yang harus diikuti adalah Pemindaian itu buruk, Pencarian itu baik.
Indeks Scan
Ketika SQL Server melakukan pemindaian, ia memuat objek yang ingin dibaca dari disk ke dalam memori, kemudian membaca objek tersebut dari atas ke bawah untuk mencari catatan yang dibutuhkannya.
Pencarian Indeks
Ketika SQL Server melakukan pencarian, ia tahu di mana dalam indeks bahwa datanya akan berada, jadi ia memuat indeks dari disk, langsung menuju ke bagian indeks yang dibutuhkan dan membaca ke mana data yang dibutuhkannya berakhir . Ini jelas merupakan operasi yang jauh lebih efisien daripada pemindaian, karena SQL sudah mengetahui di mana data yang dicari berada.
Bagaimana saya dapat mengubah Rencana Eksekusi untuk menggunakan Pencarian, bukan Pemindaian?
Ketika SQL Server mencari data Anda, mungkin salah satu hal terbesar yang akan membuat SQL Server beralih dari pencarian ke pemindaian adalah ketika beberapa kolom yang Anda cari tidak termasuk dalam indeks yang ingin Anda gunakan. Paling sering ini akan membuat SQL Server kembali melakukan pemindaian indeks berkerumun, karena indeks Tergugus berisi semua kolom di tabel. Ini adalah salah satu alasan terbesar (menurut saya setidaknya) bahwa kita sekarang memiliki kemampuan untuk MENYERTAKAN kolom dalam indeks, tanpa menambahkan kolom tersebut ke kolom indeks yang diindeks. Dengan memasukkan kolom tambahan dalam indeks, kami meningkatkan ukuran indeks, tetapi kami mengizinkan SQL Server untuk membaca indeks, tanpa harus kembali ke indeks berkerumun, atau ke tabel itu sendiri untuk mendapatkan nilai-nilai ini.
Referensi
Untuk informasi mengenai spesifik dari masing-masing operator ini dalam rencana Eksekusi SQL Server, lihat ....
Jawaban singkat:
Pemindaian indeks: Sentuh semua baris kecuali kolom tertentu.
Pencarian indeks: Sentuh baris dan kolom tertentu.
Indeks Pindai terjadi ketika definisi indeks tidak dapat menemukan pada satu baris untuk memenuhi predikat pencarian. Dalam hal ini SQL Server harus memindai beberapa halaman untuk menemukan berbagai baris yang memenuhi predikat pencarian.
Dalam kasus Pencarian Indeks, SQL Server menemukan satu baris pencarian yang cocok dengan predikat menggunakan definisi indeks .
Pencarian Indeks lebih baik dan lebih efektif.
Pemindaian menyentuh setiap baris dalam tabel meskipun itu yang Anda cari atau tidak
Seorang seeker hanya melihat pada baris yang Anda cari.
Pencarian selalu lebih baik daripada pemindaian karena lebih efisien dalam cara mencari data.
Penjelasan yang bagus dapat ditemukan di sini