Indeks penyimpan kolom berkluster dan non-kluster

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure 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

Dokumentasi SQL Server menggunakan istilah pohon B umumnya dalam referensi ke indeks. Dalam indeks rowstore, SQL Server mengimplementasikan pohon B+. Ini tidak berlaku untuk indeks penyimpan kolom atau penyimpanan data dalam memori. Untuk informasi selengkapnya, lihat panduan arsitektur dan desain indeks SQL Server dan Azure SQL.

Tabel atau tampilan bisa berisi tipe indeks berikut:

  • Terkluster

    • Indeks berkluster mengurutkan dan menyimpan baris data dalam tabel atau tampilan berdasarkan nilai kuncinya. Nilai kunci 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 diurutkan yang disebut tumpukan.
  • Tidak Terkluster

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

    • Penunjuk dari baris indeks dalam indeks nonclustered 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 untuk melewati batas kunci indeks yang ada, 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. Dengan indeks unik, 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 indeks tujuan khusus lainnya.

Indeks serta batasan

SQL Server secara otomatis membuat indeks ketika batasan KUNCI PRIMER dan UNIK ditentukan pada kolom tabel. Misalnya, saat Anda membuat tabel dengan batasan UNIK, Mesin Database secara otomatis membuat indeks non-klusster. 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 terkluster sudah ada pada tabel tersebut, SQL Server memberlakukan kunci utama menggunakan indeks non-kluster.

Untuk informasi selengkapnya, lihat Membuat kunci utama 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. Oleh karena itu, indeks ini meningkatkan performa kueri. Indeks dapat membantu untuk berbagai kueri yang berisi pernyataan SELECT, UPDATE, DELETE, atau MERGE. Pertimbangkan kueri SELECT JobTitle, HireDate FROM HumanResources.Employee WHERE BusinessEntityID = 250 dalam AdventureWorks2022 database. 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.

Selama 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 intensif sumber daya. 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 kueri 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. Tidak seperti tabel, indeks sering berisi sangat sedikit kolom per baris dan baris dalam urutan 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 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 arsitektur dan desain indeks SQL Server dan Azure SQL.

Langkah berikutnya