Aracılığıyla paylaş


Dizinleri ve kısıtlamaları etkinleştirme

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede, SQL Server Management Studio veya Transact-SQL kullanarak SQL Server'da devre dışı bırakılmış bir dizinin nasıl etkinleştirileceği açıklanır. Bir dizin devre dışı bırakıldıktan sonra yeniden yapılandırılıp silinene kadar devre dışı kalır.

Limitations

Dizin yeniden derlendikten sonra, dizini devre dışı bırakma nedeniyle devre dışı bırakılan tüm kısıtlamalar el ile etkinleştirilmelidir. PRIMARY KEY ve UNIQUE kısıtlamaları, ilişkili dizini yeniden oluşturarak etkinleştirilir. FOREIGN KEY veya PRIMARY KEY kısıtlamalarına atıfta bulunan UNIQUE kısıtlamalarını etkinleştirebilmeniz için, bu dizinin önce yeniden oluşturulup etkinleştirilmesi gerekir. FOREIGN KEY kısıtları, ALTER TABLE CHECK CONSTRAINT deyimi kullanılarak etkinleştirilir.

ONLINE seçeneği ON olarak ayarlandığında, devre dışı bırakılmış bir kümelenmiş dizin yeniden oluşturulamaz.

Kümelenmiş dizin devre dışı bırakıldığında veya etkinleştirildiğinde ve kümelenmemiş dizin devre dışı bırakıldığında, kümelenmiş dizin eylemi devre dışı bırakılan kümelenmemiş dizinde aşağıdaki sonuçları içerir.

Kümelenmiş dizin eylemi Kümelenmemiş dizin durumu devre dışı bırakıldı
ALTER INDEX REBUILD Devre dışı kalmaya devam eder
ALTER INDEX ALL REBUILD Yeniden oluşturulmuş ve etkin
DROP INDEX Yeniden oluşturulmuş ve etkin
CREATE INDEX WITH DROP_EXISTING Devre dışı kalmaya devam eder

Yeni bir kümelenmiş dizin oluşturmak, ALTER INDEX ALL REBUILD ile aynı şekilde çalışır.

Kümelenmiş dizinle ilişkili kümelenmemiş dizinlerde izin verilen eylemler, her iki dizin türünün de devre dışı veya etkin durumuna bağlıdır. Aşağıdaki tabloda, kümelenmemiş dizinlerde izin verilen eylemler özetlenmiştir.

Kümelenmemiş dizin işlemi Hem kümelenmiş hem de kümelenmemiş dizinler devre dışı bırakıldığında Kümelenmiş dizin etkinleştirildiğinde ve kümelenmemiş dizin iki durumda da olduğunda
ALTER INDEX REBUILD Eylem başarısız oluyor Eylem başarılı olur
DROP INDEX Eylem başarılı olur Eylem başarılı olur
CREATE INDEX WITH DROP_EXISTING Eylem başarısız oluyor Eylem başarılı olur

Devre dışı bırakılmış sıkıştırılmış kümelenmemiş dizinleri yeniden oluştururken, varsayılan olarak data_compressionkullanılır. Bu, none dizinlerin sıkıştırılmaması anlamına gelir. Bunun nedeni sıkıştırma ayarları meta verilerinin, kümelenmemiş dizinler devre dışı bırakıldığında kaybolmasıdır. Bu sorunu geçici olarak çözmek için rebuild deyiminde açık veri sıkıştırması belirtmeniz gerekir.

Permissions

Tablo veya görünümde ALTER izin gerektirir. Eğer DBCC DBREINDEX kullanıyorsanız, tabloya sahip olmanız veya sysadmin sabit sunucu rolünün, ya da db_ddladmin veya db_owner sabit veritabanı rollerinin üyesi olmanız gerekir.

SQL Server Management Studio'yu kullanma

Devre dışı bırakılmış dizini etkinleştirme

  1. Nesne Gezgini'nde artı işaretini seçerek dizini etkinleştirmek istediğiniz tabloyu içeren veritabanını genişletin.

  2. artı işaretini seçerek Tablolar klasörünü genişletin.

  3. Artı işaretini seçerek dizini etkinleştirmek istediğiniz tabloyu genişletin.

  4. Dizinler klasörünü genişletmek için artı işaretini seçin.

  5. Etkinleştirmek istediğiniz dizine sağ tıklayın ve Yeniden Oluştur'a tıklayın.

  6. Dizinleri Yeniden Oluştur iletişim kutusunda, yeniden oluşturulacak dizinler kılavuzunda doğru dizinin olup olmadığını doğrulayın ve Tamam seçeneğini seçin.

Tablodaki tüm dizinleri etkinleştirme

  1. Nesne Gezgini'nde artı işaretini seçerek dizinleri etkinleştirmek istediğiniz tabloyu içeren veritabanını genişletin.

  2. artı işaretini seçerek Tablolar klasörünü genişletin.

  3. Dizinleri etkinleştirmek istediğiniz tabloyu genişletmek için artı işaretini seçin.

  4. Dizinler klasörüne sağ tıklayın ve Tümünü Yeniden Derle'yi seçin.

  5. Dizinleri Yeniden Oluştur iletişim kutusunda, yeniden oluşturulacak dizinler alanında doğru dizinlerin bulunduğunu doğrulayın ve Tamam seçeneğini seçin. Yeniden derlenecek Dizinler alanından bir dizini kaldırmak için dizini seçin ve Sil tuşuna basın.

Dizinleri Yeniden Oluştur iletişim kutusunda aşağıdaki bilgiler bulunur:

Transact-SQL kullanma

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

ALTER INDEX kullanarak devre dışı bırakılmış dizini etkinleştirme

Aşağıdaki Transact-SQL betiğini çalıştırın. Bu örnek, tablodaki IX_Employee_OrganizationLevel_OrganizationNodeHumanResources.Employee dizini etkinleştirir.

USE AdventureWorks2022;
GO

ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee REBUILD;
GO

CREATE INDEX kullanarak devre dışı bırakılmış dizini etkinleştirme

Aşağıdaki Transact-SQL betiğini çalıştırın. Bu örnek, IX_Employee_OrganizationLevel_OrganizationNode dizinini HumanResources.Employee ve OrganizationLevel sütunları kullanarak OrganizationNode tablosunda yeniden oluşturur ve mevcut IX_Employee_OrganizationLevel_OrganizationNode dizinini siler.

USE AdventureWorks2022;
GO

CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee(OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON);
GO

DBCC DBREINDEX kullanarak devre dışı bırakılmış dizini etkinleştirme

Note

Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.

Aşağıdaki Transact-SQL betiğini çalıştırın. Bu örnek, tablodaki IX_Employee_OrganizationLevel_OrganizationNodeHumanResources.Employee dizini etkinleştirir.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);
GO

ALTER INDEX kullanarak bir tablodaki tüm dizinleri etkinleştirme

Aşağıdaki Transact-SQL betiğini çalıştırın. Bu örnek tablodaki HumanResources.Employee tüm dizinleri etkinleştirir.

USE AdventureWorks2022;
GO

ALTER INDEX ALL
ON HumanResources.Employee REBUILD;
GO

DBCC DBREINDEX kullanarak bir tablodaki tüm dizinleri etkinleştirme

Note

Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.

Aşağıdaki Transact-SQL betiğini çalıştırın. Bu örnek tablodaki HumanResources.Employee tüm dizinleri etkinleştirir.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", " ");
GO