Menonaktifkan indeks dan batasan
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Artikel ini menjelaskan cara menonaktifkan indeks atau batasan di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Menonaktifkan indeks mencegah akses pengguna ke indeks, dan untuk indeks berkluster ke data tabel yang mendasar. Definisi indeks tetap dalam metadata, dan statistik indeks disimpan pada indeks nonclustered. Menonaktifkan indeks berkluster pada tampilan atau indeks non-kluster menghapus data indeks secara fisik.
Menonaktifkan indeks berkluster pada tabel mencegah akses ke data. Data masih tetap dalam tabel, tetapi tidak tersedia untuk operasi bahasa manipulasi data (DML) hingga indeks dihilangkan atau dibangun kembali.
Batasan
Indeks tidak dipertahankan saat dinonaktifkan.
Pengoptimal kueri tidak mempertimbangkan indeks yang dinonaktifkan saat membuat rencana eksekusi kueri. Selain itu, kueri yang mereferensikan indeks yang dinonaktifkan dengan petunjuk tabel gagal.
Anda tidak dapat membuat indeks yang menggunakan nama yang sama dengan indeks yang sudah dinonaktifkan.
Indeks yang dinonaktifkan dapat dihilangkan.
Saat Anda menonaktifkan indeks unik, PRIMARY KEY
atau UNIQUE
batasan dan semua FOREIGN KEY
batasan yang mereferensikan kolom terindeks dari tabel lain juga dinonaktifkan. Saat Anda menonaktifkan indeks berkluster, semua batasan masuk dan keluar FOREIGN KEY
pada tabel yang mendasar juga dinonaktifkan. Nama batasan tercantum dalam pesan peringatan saat indeks dinonaktifkan. Setelah Anda membangun ulang indeks, semua batasan harus diaktifkan secara manual dengan menggunakan ALTER TABLE CHECK CONSTRAINT
pernyataan .
Indeks non-kluster secara otomatis dinonaktifkan saat indeks terkluster terkait dinonaktifkan. Mereka tidak dapat diaktifkan sampai indeks terkluster pada tabel atau tampilan diaktifkan atau indeks berkluster pada tabel dihilangkan. Indeks non-kluster harus diaktifkan secara eksplisit, kecuali indeks berkluster diaktifkan dengan menggunakan ALTER INDEX ALL REBUILD
pernyataan .
Pernyataan ALTER INDEX ALL REBUILD
membangun kembali dan mengaktifkan semua indeks yang dinonaktifkan pada tabel, kecuali untuk indeks yang dinonaktifkan pada tampilan. Indeks pada tampilan harus diaktifkan dalam pernyataan terpisah ALTER INDEX ALL REBUILD
.
Menonaktifkan indeks berkluster pada tabel juga menonaktifkan semua indeks terkluster dan non-kluster pada tampilan yang mereferensikan tabel tersebut. Indeks ini harus dibangun kembali sama seperti indeks tersebut pada tabel yang direferensikan.
Baris data indeks terkluster yang dinonaktifkan tidak dapat diakses kecuali untuk menghilangkan atau membangun kembali indeks berkluster.
Anda dapat membangun kembali indeks non-kluster yang dinonaktifkan secara online ketika tabel tidak memiliki indeks berkluster yang dinonaktifkan. Namun, Anda harus selalu membangun kembali indeks terkluster yang dinonaktifkan secara offline jika Anda menggunakan ALTER INDEX REBUILD
pernyataan atau CREATE INDEX WITH DROP_EXISTING
. Untuk informasi selengkapnya tentang operasi indeks online, lihat Melakukan operasi indeks secara online.
Pernyataan CREATE STATISTICS
tidak dapat berhasil dijalankan pada tabel yang memiliki indeks berkluster yang dinonaktifkan.
Opsi AUTO_CREATE_STATISTICS
database membuat statistik baru pada kolom saat indeks dinonaktifkan dan kondisi berikut ini ada:
AUTO_CREATE_STATISTICS
diatur keON
.- Tidak ada statistik yang ada untuk kolom tersebut.
- Statistik diperlukan selama pengoptimalan kueri.
Jika indeks berkluster dinonaktifkan, DBCC CHECKDB tidak dapat mengembalikan informasi tentang tabel yang mendasar; sebagai gantinya, pernyataan melaporkan bahwa indeks berkluster dinonaktifkan. DBCC INDEXDEFRAG tidak dapat digunakan untuk mendefragmentasi indeks yang dinonaktifkan; pernyataan gagal dengan pesan kesalahan. Anda dapat menggunakan DBCC DBREINDEX untuk membangun kembali indeks yang dinonaktifkan.
Membuat indeks berkluster baru memungkinkan indeks nonclustered yang dinonaktifkan sebelumnya. Untuk informasi selengkapnya, lihat Mengaktifkan Indeks dan Batasan.
Jika tabel adalah tumpukan, semua indeks nonclustered dibangun kembali.
Izin
Untuk menjalankan ALTER INDEX
, minimal, ALTER
izin pada tabel atau tampilan diperlukan.
Menggunakan SQL Server Management Studio
Menonaktifkan indeks
Di Object Explorer, pilih tanda plus untuk memperluas database yang berisi tabel tempat Anda ingin menonaktifkan indeks.
Pilih tanda plus untuk memperluas folder Tabel .
Pilih tanda plus untuk memperluas tabel tempat Anda ingin menonaktifkan indeks.
Pilih tanda plus untuk memperluas folder Indeks .
Klik kanan indeks yang ingin Anda nonaktifkan dan pilih Nonaktifkan.
Catatan
Jika tabel terbuka dalam mode Desain , kontrol Nonaktifkan tidak tersedia. Untuk melanjutkan, tutup perancang tabel dan mulai lagi.
Dalam kotak dialog Nonaktifkan Indeks , verifikasi bahwa indeks yang benar ada di Indeks untuk menonaktifkan kisi dan pilih OK.
Menonaktifkan semua indeks pada tabel
Di Object Explorer, pilih tanda plus untuk memperluas database yang berisi tabel tempat Anda ingin menonaktifkan indeks.
Pilih tanda plus untuk memperluas folder Tabel .
Pilih tanda plus untuk memperluas tabel tempat Anda ingin menonaktifkan indeks.
Klik kanan folder Indeks dan pilih Nonaktifkan Semua.
Dalam kotak dialog Nonaktifkan Indeks , verifikasi bahwa indeks yang benar ada di Indeks untuk menonaktifkan kisi dan pilih OK. Untuk menghapus indeks dari Indeks untuk menonaktifkan kisi, pilih indeks lalu tekan tombol Hapus .
Informasi berikut ini tersedia dalam kotak dialog Nonaktifkan Indeks :
Nama Indeks
Menampilkan nama indeks. Selama eksekusi, kolom ini juga menampilkan ikon yang mewakili status.
Nama Tabel
Menampilkan nama tabel atau tampilan tempat indeks dibuat.
Tipe Indeks
Menampilkan jenis indeks: Berkluster, Tidak Terkluster, Spasial, atau XML.
Keadaan
Menampilkan status operasi penonaktifan. Nilai yang mungkin setelah eksekusi adalah:
Kosong
Sebelum eksekusi, Status kosong.
Dalam proses
Menonaktifkan indeks telah dimulai tetapi tidak selesai.
Keberhasilan
Operasi nonaktifkan berhasil diselesaikan.
Kesalahan
Terjadi kesalahan selama operasi nonaktifkan indeks, dan operasi tidak berhasil diselesaikan.
Berhenti
Penonaktifan indeks tidak berhasil diselesaikan, karena pengguna menghentikan operasi.
Pesan
Menyediakan teks pesan kesalahan selama operasi nonaktifkan. Selama eksekusi, kesalahan muncul sebagai hyperlink. Teks hyperlink menjelaskan isi kesalahan. Kolom Pesan jarang cukup lebar untuk membaca teks pesan lengkap. Ada dua cara untuk mendapatkan teks lengkap:
- Pindahkan penunjuk mouse ke sel pesan untuk menampilkan tipsalat dengan teks kesalahan.
- Pilih hyperlink untuk menampilkan kotak dialog yang menampilkan kesalahan penuh.
Menggunakan Transact-SQL
Sampel kode Transact-SQL dalam artikel ini menggunakan AdventureWorks2022
database sampel atau AdventureWorksDW2022
, yang dapat Anda unduh dari halaman beranda Sampel Microsoft SQL Server dan Proyek Komunitas.
Menonaktifkan indeks
Di Object Explorer, sambungkan ke instans Mesin Database.
Pada bilah Standar, pilih Kueri Baru.
Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan. Sampel ini menonaktifkan
IX_Employee_OrganizationLevel_OrganizationNode
indeks padaHumanResources.Employee
tabel.USE AdventureWorks2022; GO ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee DISABLE;
Menonaktifkan semua indeks pada tabel
Di Object Explorer, sambungkan ke instans Mesin Database.
Pada bilah Standar, pilih Kueri Baru.
Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan. Sampel ini menonaktifkan semua indeks pada
HumanResources.Employee
tabel.USE AdventureWorks2022; GO ALTER INDEX ALL ON HumanResources.Employee DISABLE;