Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL database di Microsoft Fabric
Artikel ini menjelaskan cara membuat, membangun kembali, atau menghilangkan indeks secara online menggunakan SQL Server Management Studio atau Transact-SQL. Opsi ini ONLINE
memungkinkan akses pengguna bersamaan ke tabel dasar atau data indeks berkluster serta indeks noncluster terkait selama operasi indeks ini. Misalnya, saat indeks berkluster sedang dibangun kembali oleh satu pengguna, pengguna tersebut dan pengguna lainnya dapat terus memperbarui dan mengkueri data yang mendasar.
Saat Anda melakukan operasi bahasa definisi data (DDL) secara offline, seperti membangun atau membangun kembali indeks berkluster, operasi ini menyimpan kunci eksklusif (X
) pada data yang mendasar dan indeks terkait. Ini mencegah modifikasi dan kueri ke data yang mendasarinya hingga operasi indeks selesai.
Catatan
Perintah pembangunan ulang indeks mungkin menyimpan kunci eksklusif pada indeks berkluster setelah kolom objek besar dihilangkan dari tabel, bahkan ketika dilakukan secara online.
Opsi ONLINE
ini tersedia dalam pernyataan Transact-SQL berikut.
- MEMBUAT INDEKS
- UBAH INDEKS
- DROP INDEX
-
UBAH TABEL (Untuk menambah atau menghapus batasan
UNIQUE
atauPRIMARY KEY
)
Untuk batasan dan pembatasan terkait pembuatan, pembangunan kembali, atau penurunan indeks secara online, lihat Panduan untuk operasi indeks online.
Untuk menggunakan operasi indeks yang dapat dilanjutkan, operasi indeks harus dilakukan secara online. Untuk informasi selengkapnya, lihat Pertimbangan indeks yang dapat dilanjutkan.
Platform yang didukung
Operasi indeks online tidak tersedia di setiap edisi SQL Server. Untuk informasi selengkapnya, lihat Edisi dan fitur yang didukung SQL Server 2022.
Operasi indeks online tersedia di Azure SQL Database dan Azure SQL Managed Instance.
Izin
Memerlukan izin ALTER
pada tabel atau tampilan.
Menggunakan SQL Server Management Studio
Di Object Explorer, perluas database yang berisi tabel tempat Anda ingin membangun ulang indeks secara online.
Luaskan folder Tabel.
Perluas tabel tempat Anda ingin membangun ulang indeks secara online.
Perluas folder Indeks.
Gunakan menu konteks untuk indeks yang ingin Anda bangun ulang secara online dan pilih properti .
Di bawah Pilih halaman, pilih Opsi.
Pilih Izinkan pemrosesan DML online, lalu pilih True dari daftar.
Pilih OK.
Gunakan menu konteks untuk indeks yang ingin Anda bangun ulang secara online dan pilih Bangun ulang.
Dalam kotak dialog Bangun Kembali Indeks, verifikasi bahwa indeks yang benar ada di Indeks untuk dibangun kembali daftar dan pilih OK.
Menggunakan Transact-SQL
Contoh berikut membangun kembali indeks online yang ada dalam database sampel AdventureWorks
.
ALTER INDEX AK_Employee_NationalIDNumber
ON HumanResources.Employee
REBUILD WITH (ONLINE = ON);
Contoh berikut menghapus indeks berkluster secara online dan memindahkan tabel yang dihasilkan (tumpukan) ke grup NewGroup
file dengan menggunakan MOVE TO
klausul . Tampilan sys.indexes
katalog , sys.tables
, dan sys.filegroups
dikueri untuk memverifikasi penempatan indeks dan tabel di grup file sebelum dan sesudah pemindahan.
-- Create a clustered index on the PRIMARY filegroup if the index does not exist.
IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name =
N'AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate')
CREATE UNIQUE CLUSTERED INDEX
AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate
ON Production.BillOfMaterials (ProductAssemblyID, ComponentID,
StartDate)
ON 'PRIMARY';
GO
-- Verify filegroup location of the clustered index.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
JOIN sys.tables as t ON i.object_id = t.object_id
AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')
GO
-- Create filegroup NewGroup if it does not exist.
IF NOT EXISTS (SELECT name FROM sys.filegroups
WHERE name = N'NewGroup')
BEGIN
ALTER DATABASE AdventureWorks2022
ADD FILEGROUP NewGroup;
ALTER DATABASE AdventureWorks2022
ADD FILE (NAME = File1,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\File1.ndf')
TO FILEGROUP NewGroup;
END
GO
-- Verify new filegroup
SELECT * from sys.filegroups;
GO
-- Drop the clustered index and move the BillOfMaterials table to
-- the Newgroup filegroup.
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate
ON Production.BillOfMaterials
WITH (ONLINE = ON, MOVE TO NewGroup);
GO
-- Verify filegroup location of the moved table.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
JOIN sys.tables as t ON i.object_id = t.object_id
AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');
Untuk informasi selengkapnya, lihat ALTER INDEX (T-SQL).