Indeks terkluster dan non-kluster dijelaskan

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance

Indeks adalah struktur pada disk yang terkait dengan tabel atau tampilan yang mempercepat pengambilan baris dari tabel atau tampilan. Indeks berisi kunci yang dibuat dari satu atau beberapa kolom dalam tabel atau tampilan. Kunci ini disimpan dalam struktur (pohon B) yang memungkinkan SQL Server menemukan baris atau baris yang terkait dengan nilai kunci dengan cepat dan efisien.

Catatan

SQL Server dokumentasi menggunakan istilah pohon B umumnya mengacu pada indeks. Dalam indeks rowstore, SQL Server mengimplementasikan pohon B+. Ini tidak berlaku untuk indeks penyimpan kolom atau penyimpanan data dalam memori. Tinjau Panduan Arsitektur dan Desain Indeks SQL Server untuk detailnya.

Tabel atau tampilan bisa berisi jenis indeks berikut:

  • Berkerumun

    • Indeks berkluster mengurutkan dan menyimpan baris data dalam tabel atau tampilan berdasarkan nilai kuncinya. Ini adalah kolom yang disertakan dalam definisi indeks. Hanya ada satu indeks berkluster per tabel, karena baris data itu sendiri hanya dapat disimpan dalam satu urutan.  
    • Satu-satunya waktu baris data dalam tabel disimpan dalam urutan yang diurutkan adalah ketika tabel berisi indeks berkluster. Saat tabel memiliki indeks berkluster, tabel disebut tabel berkluster. Jika tabel tidak memiliki indeks berkluster, baris datanya disimpan dalam struktur yang tidak berurut yang disebut tumpukan.
  • Tidak berkluster

    • Indeks nonkluster memiliki struktur yang terpisah dari baris data. Indeks nonkluster berisi nilai kunci indeks nonkluster dan setiap entri nilai kunci memiliki penunjuk ke baris data yang berisi nilai kunci.

    • Penunjuk dari baris indeks dalam indeks nonkluster ke baris data disebut pencari baris. Struktur pencari baris bergantung pada apakah halaman data disimpan dalam tumpukan atau tabel berkluster. Untuk tumpukan, pencari baris adalah penunjuk ke baris. Untuk tabel berkluster, pencari baris adalah kunci indeks berkluster.

    • Anda dapat menambahkan kolom non-kunci ke tingkat daun indeks non-kluster ke batas kunci indeks yang ada secara by-pass, dan menjalankan kueri yang tercakup sepenuhnya, terindeks, . Untuk informasi selengkapnya, lihat Membuat indeks dengan kolom yang disertakan. Untuk detail tentang batas kunci indeks, lihat Spesifikasi kapasitas maksimum untuk SQL Server.

Indeks berkluster dan non-kluster dapat bersifat unik. Ini berarti tidak ada dua baris yang dapat memiliki nilai yang sama untuk kunci indeks. Jika tidak, indeks tidak unik dan beberapa baris dapat berbagi nilai kunci yang sama. Untuk informasi selengkapnya, lihat Membuat indeks unik.

Indeks secara otomatis dipertahankan untuk tabel atau tampilan setiap kali data tabel dimodifikasi.

Lihat Indeks untuk jenis tambahan indeks tujuan khusus.

Indeks dan batasan

Indeks secara otomatis dibuat saat batasan PRIMARY KEY dan UNIQUE ditentukan pada kolom tabel. Misalnya, saat Anda membuat tabel dengan batasan UNIK, Mesin Database secara otomatis membuat indeks nonkluster. Jika Anda mengonfigurasi KUNCI PRIMER, Mesin Database secara otomatis membuat indeks berkluster, kecuali indeks berkluster sudah ada. Ketika Anda mencoba memberlakukan batasan KUNCI PRIMER pada tabel yang ada dan indeks berkluster sudah ada pada tabel tersebut, SQL Server memberlakukan kunci primer menggunakan indeks non-kluster.

Untuk informasi selengkapnya, lihat Membuat kunci primer dan Membuat batasan unik.

Bagaimana indeks digunakan oleh Pengoptimal Kueri

Indeks yang dirancang dengan baik dapat mengurangi operasi I/O disk dan mengonsumsi lebih sedikit sumber daya sistem sehingga meningkatkan performa kueri. Indeks dapat membantu untuk berbagai kueri yang berisi pernyataan SELECT, UPDATE, DELETE, atau MERGE. Pertimbangkan kueri SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 dalam database AdventureWorks2012 . Ketika kueri ini dijalankan, pengoptimal kueri mengevaluasi setiap metode yang tersedia untuk mengambil data dan memilih metode yang paling efisien. Metode ini mungkin pemindaian tabel, atau mungkin memindai satu atau beberapa indeks jika ada.

Saat melakukan pemindaian tabel, pengoptimal kueri membaca semua baris dalam tabel, dan mengekstrak baris yang memenuhi kriteria kueri. Pemindaian tabel menghasilkan banyak operasi I/O disk dan dapat menjadi sumber daya intensif. Namun, pemindaian tabel bisa menjadi metode yang paling efisien jika, misalnya, kumpulan hasil kueri adalah persentase baris yang tinggi dari tabel.

Saat pengoptimal kueri menggunakan indeks, pengoptimal mencari kolom kunci indeks, menemukan lokasi penyimpanan baris yang diperlukan oleh kueri dan mengekstrak baris yang cocok dari lokasi tersebut. Umumnya, mencari indeks jauh lebih cepat daripada mencari tabel karena tidak seperti tabel, indeks sering berisi sangat sedikit kolom per baris dan baris dalam urutan yang diurutkan.

Pengoptimal kueri biasanya memilih metode yang paling efisien saat menjalankan kueri. Namun, jika tidak ada indeks yang tersedia, pengoptimal kueri harus menggunakan pemindaian tabel. Tugas Anda adalah merancang dan membuat indeks yang paling cocok untuk lingkungan Anda sehingga pengoptimal kueri memiliki pilihan indeks yang efisien untuk dipilih. SQL Server menyediakan Konsultan Penyetelan Mesin Database untuk membantu analisis lingkungan database Anda dan dalam pemilihan indeks yang sesuai.

Penting

Untuk informasi selengkapnya tentang panduan desain indeks dan internal, lihat Panduan Desain Indeks SQL Server.

Langkah berikutnya