Membuat indeks unik

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Topik ini menjelaskan cara membuat indeks unik pada tabel di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Indeks unik menjamin bahwa kunci indeks tidak berisi nilai duplikat dan oleh karena itu setiap baris dalam tabel dalam beberapa cara unik. Tidak ada perbedaan signifikan antara membuat batasan UNIK dan membuat indeks unik yang independen dari batasan. Validasi data terjadi dengan cara yang sama, dan pengoptimal kueri tidak membedakan antara indeks unik yang dibuat oleh batasan atau dibuat secara manual. Namun, membuat batasan UNIK pada kolom membuat tujuan indeks menjadi jelas. Untuk informasi selengkapnya tentang batasan UNIK, lihat Batasan Unik dan Periksa Batasan.

Saat membuat indeks unik, Anda dapat mengatur opsi untuk mengabaikan kunci duplikat. Jika opsi ini diatur ke Ya dan Anda mencoba membuat kunci duplikat dengan menambahkan data yang memengaruhi beberapa baris (dengan pernyataan INSERT), baris yang berisi duplikat tidak ditambahkan. Jika diatur ke Tidak, seluruh operasi penyisipan gagal dan semua data digulung balik.

Catatan

Anda tidak dapat membuat indeks unik pada satu kolom jika kolom tersebut berisi NULL dalam lebih dari satu baris. Demikian pula, Anda tidak dapat membuat indeks unik pada beberapa kolom jika kombinasi kolom berisi NULL dalam lebih dari satu baris. Ini diperlakukan sebagai nilai duplikat untuk tujuan pengindeksan.

Dalam Topik Ini

Sebelum Anda mulai

Manfaat Indeks Unik

  • Indeks unik multikolom menjamin bahwa setiap kombinasi nilai dalam kunci indeks unik. Misalnya, jika indeks unik dibuat pada kombinasi kolom LastName, FirstName, dan MiddleName , tidak ada dua baris dalam tabel yang dapat memiliki kombinasi nilai yang sama untuk kolom ini.

  • Asalkan data di setiap kolom unik, Anda dapat membuat indeks berkluster yang unik dan beberapa indeks berkluster unik pada tabel yang sama.

  • Indeks unik memastikan integritas data kolom yang ditentukan.

  • Indeks unik memberikan informasi tambahan yang berguna bagi pengoptimal kueri yang dapat menghasilkan rencana eksekusi yang lebih efisien.

Implementasi Umum

Indeks unik diimplementasikan dengan cara berikut:

  • Batasan KUNCI PRIMER atau UNIK

    Saat Anda membuat batasan KUNCI PRIMER, indeks berkluster unik pada kolom atau kolom secara otomatis dibuat jika indeks berkluster pada tabel belum ada dan Anda tidak menentukan indeks berkluster unik. Kolom kunci utama tidak dapat mengizinkan nilai NULL.

    Saat Anda membuat batasan UNIK, indeks nonclustered unik dibuat untuk memberlakukan batasan UNIK secara default. Anda dapat menentukan indeks berkluster unik jika indeks berkluster pada tabel belum ada.

    Untuk informasi selengkapnya, lihat Batasan Unik dan Periksa Batasan dan Batasan Kunci Utama dan Asing.

  • Indeks independen dari batasan

    Beberapa indeks nonclustered unik dapat ditentukan pada tabel.

    Untuk informasi selengkapnya, lihat MEMBUAT INDEKS (Transact-SQL).

  • Tampilan terindeks

    Untuk membuat tampilan terindeks, indeks berkluster unik ditentukan pada satu atau beberapa kolom tampilan. Tampilan dijalankan dan kumpulan hasil disimpan dalam tingkat daun indeks dengan cara yang sama data tabel disimpan dalam indeks berkluster. Untuk informasi selengkapnya, lihat Membuat Tampilan Terindeks.

Batasan dan Pembatasan

  • Indeks unik, batasan UNIK, atau batasan KUNCI PRIMER tidak dapat dibuat jika nilai kunci duplikat ada dalam data.

  • Indeks nonclustered unik dapat berisi kolom non-kunci yang disertakan. Untuk informasi selengkapnya, lihat Membuat indeks dengan kolom yang disertakan.

Keamanan

Izin

Memerlukan izin ALTER pada tabel atau tampilan. Pengguna harus menjadi anggota peran server tetap sysadmin atau peran database tetap db_ddladmin dan db_owner .

Menggunakan SQL Server Management Studio

Untuk membuat indeks unik dengan menggunakan Desainer Tabel

  1. Di Object Explorer, perluas database yang berisi tabel tempat Anda ingin membuat indeks unik.

  2. Luaskan folder Tabel.

  3. Klik kanan tabel tempat Anda ingin membuat indeks unik dan pilih Desain.

  4. Pada menu Desainer Tabel, pilih Indeks/Kunci.

  5. Dalam kotak dialog Indeks/Kunci , klik Tambahkan.

  6. Pilih indeks baru dalam kotak teks Kunci Primer/Unik atau Indeks yang Dipilih.

  7. Di kisi utama, di bawah (Umum), pilih Jenis lalu pilih Indeks dari daftar.

  8. Pilih Kolom, lalu klik elipsis (...).

  9. Dalam kotak dialog Kolom Indeks, di bawah Nama Kolom, pilih kolom yang ingin Anda indeks. Anda dapat memilih hingga 16 kolom. Untuk performa optimal, pilih hanya satu atau dua kolom per indeks. Untuk setiap kolom yang Anda pilih, tunjukkan apakah indeks menyusun nilai kolom ini dalam urutan naik atau menurun.

  10. Ketika semua kolom untuk indeks dipilih, klik OK.

  11. Di kisi, di bawah (Umum), pilih Unik lalu pilih Ya dari daftar.

  12. Opsional: Di kisi utama, di bawah Perancang Tabel, pilih Abaikan Kunci Duplikat lalu pilih Ya dari daftar. Lakukan ini jika Anda ingin mengabaikan upaya untuk menambahkan data yang akan membuat kunci duplikat dalam indeks unik.

  13. Klik Tutup.

  14. Pada menu File , klik Simpantable_name.

Membuat indeks unik dengan menggunakan Object Explorer

  1. Di Object Explorer, perluas database yang berisi tabel tempat Anda ingin membuat indeks unik.

  2. Luaskan folder Tabel.

  3. Perluas tabel tempat Anda ingin membuat indeks unik.

  4. Klik kanan folder Indeks, arahkan ke Indeks Baru, dan pilih Indeks Non-Kluster....

  5. Dalam kotak dialog Indeks Baru, pada halaman Umum , masukkan nama indeks baru dalam kotak Nama indeks.

  6. Pilih kotak centang Unik .

  7. Di bawah Kolom kunci indeks, klik Tambahkan....

  8. Dalam kotak dialog Pilih Kolom daritable_name , pilih kotak centang atau kotak centang kolom tabel atau kolom yang akan ditambahkan ke indeks unik.

  9. Klik OK.

  10. Dalam kotak dialog Indeks Baru, klik OK.

Menggunakan T-SQL

Untuk membuat indeks unik pada tabel

  1. Di Object Explorer, sambungkan ke instans Mesin Database.

  2. Pada bilah Standar, klik Kueri Baru.

  3. Salin dan tempel contoh berikut ke dalam jendela kueri dan klik Jalankan.

    USE AdventureWorks2022;  
    GO  
    -- Find an existing index named AK_UnitMeasure_Name 
    -- on the Production.UnitMeasure table and delete it if found. 
    IF EXISTS (SELECT name from sys.indexes  
               WHERE name = N'AK_UnitMeasure_Name'
               AND object_id = OBJECT_ID(N'Production.UnitMeasure', N'U'))   
       DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure;   
    GO  
    -- Create a unique index called AK_UnitMeasure_Name  
    -- on the Production.UnitMeasure table using the Name column.  
    CREATE UNIQUE INDEX AK_UnitMeasure_Name   
       ON Production.UnitMeasure (Name);   
    GO  
    

Untuk informasi selengkapnya, lihat MEMBUAT INDEKS (Transact-SQL).