Aracılığıyla paylaş


Dizinleri ve kısıtlamaları devre dışı bırakma

Ş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 bir dizinin veya kısıtlamaların nasıl devre dışı bırakıldığı açıklanır. Bir dizini devre dışı bırakmak, kullanıcının dizine ve kümelenmiş dizinler için temel tablo verilerine erişimini engeller. Dizin tanımı meta verilerde kalır ve dizin istatistikleri kümelenmemiş dizinlerde tutulur. Bir görünümde veya kümelenmemiş bir dizinde kümelenmiş bir dizini devre dışı bırakmak, dizin verilerini fiziksel olarak siler.

Tabloda kümelenmiş dizini devre dışı bırakmak verilere erişimi engeller. Veriler hala tabloda kalır, ancak dizin bırakılana veya yeniden oluşturulduğundaya kadar veri işleme dili (DML) işlemleri için kullanılamaz.

Limitations

Dizin devre dışı bırakıldığında bakımı yapılmaz.

Sorgu iyileştiricisi, sorgu yürütme planları oluştururken devre dışı bırakılmış dizini dikkate almaz. Ayrıca, devre dışı bırakılmış dizine tablo ipucunu kullanarak referans veren sorgular hata verir.

Mevcut devre dışı bırakılmış dizinle aynı adı kullanan bir dizin oluşturamazsınız.

Devre dışı bırakılmış bir dizin silinebilir.

Benzersiz bir dizini devre dışı bırakdığınızda, PRIMARY KEY veya UNIQUE kısıtlaması ve diğer tablolardan dizine alınan sütunlara başvuran tüm FOREIGN KEY kısıtlamalar da devre dışı bırakılır. Kümelenmiş dizini devre dışı bırakırsanız, temel alınan tablodaki tüm gelen ve giden FOREIGN KEY kısıtlamalar da devre dışı bırakılır. Dizin devre dışı bırakıldığında kısıtlama adları bir uyarı iletisinde listelenir. Dizini yeniden oluşturduktan sonra, tüm kısıtlamaların ALTER TABLE CHECK CONSTRAINT komutunu kullanarak elle etkinleştirilmesi gerekir.

İlişkili kümelenmiş dizin devre dışı bırakıldığında, kümelenmemiş dizinler otomatik olarak devre dışı bırakılır. Tablodaki veya görünümdeki kümelenmiş dizin etkinleştirilene veya tablodaki kümelenmiş dizin bırakılana kadar etkinleştirilemezler. Kümelenmiş dizin deyimi kullanılarak ALTER INDEX ALL REBUILD etkinleştirilmediği sürece, kümelenmemiş dizinler açıkça etkinleştirilmelidir.

ALTER INDEX ALL REBUILD deyimi, görünümlerdeki devre dışı bırakılmış dizinler dışında tablodaki tüm devre dışı dizinleri yeniden oluşturur ve etkinleştirir. Görünümlerdeki dizinler, ayrı bir ALTER INDEX ALL REBUILD deyiminde etkinleştirilmelidir.

Tablodaki kümelenmiş dizini devre dışı bırakmak, bu tabloya başvuran görünümlerde kümelenmiş ve kümelenmemiş tüm dizinleri de devre dışı bırakır. Bu dizinler, başvurulan tablodaki dizinler gibi yeniden oluşturulmalıdır.

Kümelenmiş dizini bırakma veya yeniden oluşturma dışında, devre dışı bırakılmış kümelenmiş dizinin veri satırlarına erişilemiyor.

Tabloda devre dışı bırakılmış bir kümelemeli indeks yoksa, devre dışı bırakılmış bir kümeleme olmayan indeksi çevrimiçi olarak yeniden oluşturabilirsiniz. Ancak, ALTER INDEX REBUILD veya CREATE INDEX WITH DROP_EXISTING deyimlerinden birini kullanıyorsanız, devre dışı bırakılmış bir kümelenmiş dizini her zaman çevrimdışı olarak yeniden oluşturmanız gerekir. Çevrimiçi dizin işlemleri hakkında daha fazla bilgi için bkz. Dizin işlemlerini çevrimiçi gerçekleştirme.

CREATE STATISTICS deyimi, kümelenmiş dizini devre dışı bırakılmış bir tabloda başarıyla çalıştırılamaz.

Veritabanı AUTO_CREATE_STATISTICS seçeneği, dizin devre dışı bırakıldığında ve aşağıdaki koşullar mevcut olduğunda sütunda yeni istatistikler oluşturur:

  • AUTO_CREATE_STATISTICS olarak ayarlanır ON.
  • Sütun için mevcut istatistik yok.
  • Sorgu iyileştirme sırasında istatistikler gereklidir.

Kümelenmiş dizin devre dışı bırakılırsa DBCC CHECKDB temel alınan tablo hakkında bilgi döndüremez; bunun yerine, deyimi kümelenmiş dizinin devre dışı bırakıldığını bildirir. DBCC INDEXDEFRAG devre dışı bırakılmış bir dizini birleştirmek için kullanılamaz; deyimi bir hata iletisiyle başarısız oluyor. Devre dışı bırakılmış bir dizini yeniden oluşturmak için DBCC DBREINDEX kullanabilirsiniz.

Yeni bir kümelenmiş dizin oluşturmak, daha önce devre dışı bırakılan kümelenmemiş dizinleri etkinleştirir. Daha fazla bilgi için bkz. Dizinleri ve Kısıtlamaları Etkinleştirme.

Tablo bir yığınsa, tüm kümelenmemiş dizinler yeniden oluşturulur.

Permissions

yürütmek için ALTER INDEX, en azından tablo veya görünümde ALTER izni gereklidir.

SQL Server Management Studio'yu kullanma

Dizini devre dışı bırakma

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

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

  3. Bir dizini devre dışı bırakmak istediğiniz tabloyu genişletmek için artı işaretini seçin.

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

  5. Devre dışı bırakmak istediğiniz dizine sağ tıklayın ve Devre dışı bırak'ı seçin.

    Note

    Tablo Tasarım modunda açıksa, Devre Dışı Bırak denetimi mevcut değildir. Devam etmek için tablo tasarımcısını kapatın ve baştan başlayın.

  6. Dizinleri Devre Dışı Bırak iletişim kutusunda, devre dışı bırakılacak dizinler kılavuzunda doğru dizini doğrulayın ve Tamam'ı seçin.

Tablodaki tüm dizinleri devre dışı bırakma

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

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

  3. Dizinleri devre dışı bırakmak 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ü Devre Dışı Bırak'ı seçin.

  5. Dizinleri Devre Dışı Bırak iletişim kutusunda, Devre Dışı Bırakılacak Dizinler kılavuzunda doğru dizinlerin yer aldığını doğrulayın ve Tamam'ı seçin. Devre dışı bırakılacak Dizinler kılavuzundan bir dizini kaldırmak için dizini seçin ve Delete tuşuna basın.

Dizinleri Devre Dışı Bırak iletişim kutusunda aşağıdaki bilgiler bulunur:

  • Dizin Adı

    Dizinin adını görüntüler. Yürütme sırasında, bu sütun durumu temsil eden bir simge de görüntüler.

  • Tablo Adı

    Dizinin oluşturulduğu tablonun veya görünümün adını görüntüler.

  • Dizin Türü

    Dizinin türünü görüntüler: Kümelenmiş, Kümelenmemiş, Uzamsal veya XML.

  • Status

    Devre dışı bırakma işleminin durumunu görüntüler. Yürütme sonrasındaki olası değerler şunlardır:

    • Blank

      Yürütmeden önce Durum boş olur.

    • Devam ediyor

      Dizinleri devre dışı bırakma işlemi başlatıldı ancak tamamlanmadı.

    • Success

      Devre dışı bırakma işlemi başarıyla tamamlandı.

    • Error

      Dizin devre dışı bırakma işlemi sırasında bir hatayla karşılaşıldı ve işlem başarıyla tamamlanamadı.

    • Stopped

      Kullanıcı işlemi durdurduğu için dizinin devre dışı bırakılması başarıyla tamamlanmadı.

  • Message

    Devre dışı bırakma işlemi sırasında hata iletilerinin metnini sağlar. Yürütme sırasında hatalar köprü olarak görünür. Köprülerin metni hatanın içeriğini açıklar. İleti sütunu, ileti metninin tamamını okuyacak kadar çok geniş değildir. Tam metni almanın iki yolu vardır:

    • Hata metnini içeren bir araç ipucu görüntülemek için fare işaretçisini ileti hücresinin üzerine getirin.
    • Tam hatayı gösteren bir iletişim kutusu görüntülemek için köprüyü seçin.

Transact-SQL kullanma

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

Dizini devre dışı bırakma

  1. Nesne Gezgini'nde Veritabanı Motoru'nun bir örneğine bağlanın.

  2. Standart araç çubuğunda, Yeni Sorgu'yu seçin.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın. Bu örnek, tablodaki IX_Employee_OrganizationLevel_OrganizationNodeHumanResources.Employee dizini devre dışı bırakır.

    USE AdventureWorks2022;
    GO
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
        ON HumanResources.Employee
    DISABLE;
    

Tablodaki tüm dizinleri devre dışı bırakma

  1. Nesne Gezgini'nde Veritabanı Motoru'nun bir örneğine bağlanın.

  2. Standart araç çubuğunda, Yeni Sorgu'yu seçin.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın. Bu örnek, tablodaki HumanResources.Employee tüm dizinleri devre dışı bırakır.

    USE AdventureWorks2022;
    GO
    
    ALTER INDEX ALL ON HumanResources.Employee
    DISABLE;
    
  • alter index (Transact-SQL)