Aracılığıyla paylaş


Dizinler ve kısıtlamalar devre dışı bırakma yönergeleri

Dizin devre dışı bırakılması kullanıcı erişimini dizine ve kümelenmiş dizinler için temel alınan tablo verileri engeller.The SQL Server Database Engine may automatically disable an index during a upgrade of SQL Server, or you can manually disable an index.Daha fazla bilgi için bkz:Dizinleri devre dışı bırakma.

Dizin her türlü devre dışı bırakılabilir.Dizin devre dışı bırakıldığında, aşağıdaki kurallar uygulanır:

  • Benzersiz bir dizin değilse, birincil anahtar veya UNIQUE sınırlaması ve başka bir tablodan dizinlenmiş sütunların başvuran tüm yabancı anahtar kısıtlamaları devre dışı bırakılır.Kullanıcı dizin devre dışı bırakılması ALTER bu tabloyu izinleriniz olmalıdır veya ALTER devre dışı BıRAKıRSANıZ INDIS deyim başarısız.Dizinin kümelenmiş olup, tüm gelen ve giden yabancı anahtar kısıtlamaları temel alınan tablo devre dışı kalır.

    Dizini devre dışı bırakıldığında, kısıtlama adı bir uyarı iletisi listelenir.Dizini yeniden oluþturma sonra kısıtlamaları el ile ALTER tablo CHECK CONSTRAINT deyimini kullanarak etkinleştirilmesi gerekir.

  • Devre dışı dizin korunur.

  • sorgu iyileştiricisi dizini, sorgu yürütme planları oluşturulurken dikkate almaz.Ayrıca, bir tablonun ipucu ile devre dışı dizin başvuran sorgular başarısız.

  • Varolan bir devre dışı dizin olarak dizin tanımı meta verilerde hala varolduğundan, aynı adı kullanan bir dizin oluşturamıyor.

  • devre dışı dizin kesilmesine.

Kümelenmemiş dizin devre dışı bırakma

Kümelenmemiş bir dizin fiziksel olarak devre dışı bırakılması, dizin verileri siler.Ancak, dizin tanımı meta veriler kalır.Kümelenmemiş dizin devre dışı bırakmak için aşağıdaki ek kurallar uygulanır:

  • Dizin ile ilgili istatistik yerinde kalır ve gerektiğinde otomatik olarak güncelleştirilir.

  • Kümelenmiş dizin ilişkili devre dışı bırakıldığında kümelenmemiş dizin otomatik olarak devre dışı bırakılır.Kümelenmiş dizin tablo veya Görünüm etkin ya da tablosundaki kümelenmiş dizin bırakılan kadar bunlar etkinleştirilemez.Kümelenmiş dizin ALTER INDIS TÜM YENIDEN kullanarak etkinleştirildi sürece kümelenmemiş dizin açıkça, etkinleştirilmelidir deyim.Daha fazla bilgi için bkz:Dizinler ve kısıtlamalar etkinleştirme yönergeleri.

Kümelenmiş dizinler devre dışı bırakma

Kümelenmiş dizinler devre dışı bırakmak için aşağıdaki ek kurallar uygulanır:

  • Kümelenmiş dizin devre dışı veri satırlarının dışında bırakın veya kümelenmiş dizini yeniden oluşturmak için erişilemiyor.Bu aşağıdaki anlamýna gelir:

    • Bu işlemleri başarısız olur: SELECT, UPDATE, DELETE, INSERT, CREATE INDEX, CREATE STATISTICS (dizin) açık bir güncelleştirme istatistikleri ve tablo sütunları veya kısıtlamaları değiştirmek, ALTER TABLE deyimleri.

    • Bu işlemler başarılı olacaktır: CREATE VIEW, DROP VIEW TRIGGER CREATE, DROP TRIGGER, DROP INDEX, ALTER tablo ENABLE/DıSABLE TRIGGER, TRUNCATE tablo ve DROP tablo.

    • Kümelenmiş dizin devre dışı durumdayken kümelenmemiş dizin oluşturulamıyor.

  • Varolan kümelenmemiş dizin ve XML dizinler ilişkili tablo otomatik olarak devre dışı bırakılır ve erişilemiyor.

  • Görünümler, tablo başvuran tüm kümelenmiş ve kümelenmemiş dizinleri devre dışı bırakılır.Bu dizinler gibi başvurulan üzerindekiler yeniden oluşturulması gerekir tablo.

Kısıtlamalarını devre dışı bırakma

birincil anahtar, UNIQUE kısıtlamaları ve yabancı anahtar devre dışı bırakmak için aşağıdaki ek yönergeleri uygulayın:

  • birincil anahtar ve UNIQUE kısıtlamaları ilişkili dizin ALTER INDIS DISABLE komutunu kullanarak devre dışı bırakılarak devre dışı deyim.

  • Bir birincil anahtar kısıtlaması devre dışı bırakıldığında, tüm ilişkili yabancı anahtar kısıtlamaları da devre dışı bırakılır.Bu sınırlama NOCHECK CONSTRAINT seçeneğini ayarlama eşdeğerdir.

  • Başvurulan tablolar ALTER veya DENETIM izinleri olması gerekir.

  • Bir CASCADE UPDATE veya DELETE işlemi, yabancı anahtar bir referans olarak bildirilen varsa ve başvuru olduğundan, tüm güncelleştirmelerin veya kısıtlama başvuru için değişiklik yaymak neden delete deyimleri devre dışı tablo başarısız.

  • Yinelenen değerler yanlışlıkla eklenebilir bir tablo birincil anahtar veya benzersiz dizin devre dışı durumdayken ya da bir SQL Server Yükseltme tarafından değişikliği dizini devre dışı duruma neden oldu. Dizin başarıyla etkinleştirilmeden önce yinelenen satırları el ile düzeltmeniz gerekir.Aşağıdaki çözümleri olası şunlardır:

    • El ile kaldırmanız veya yinelenen değerleri değiştirin.

    • BENZERSIZ dizin UNIQUE kısıtlama oluşturma sonucunda oluşturulmadıysa, UNIQUE belirtmeden dizini yeniden oluşturmak için CREATE INDEX ILE DROP_EXISTING kullanın.

    • Dizin bir birincil anahtar veya UNIQUE sınırlamasıyla byproduct oluşturulursa, kısıtlama bırakma gerekir.Dizin sonra bıraktı.Bir birincil anahtar kısıtlaması için herhangi bir yabancı anahtar kısıtlamaları da kesilmesine gerekir.

  • yabancı anahtar ve CHECK kısıtlamalarını devre dışı bırakıldı olarak işaretlenir is_not_trusted.These görüntülenebilirsys.CHECK_CONSTRAINTS and sys.foreign_keys katalog görünümleri.Kısıtlamayı artık tüm satırlar için sistem tarafından doğrulanmakta olan, yani tablo.Kısıtlamayı bile yeniden etkinleştirmek için ALTER TABLE WITH CHECK seçeneğini belirtmediğiniz sürece, varolan satırların tablo karşı reverify değil.WITH specifying CHECK kısıtlamayı güvenilir olarak yeniden işaretler.

    Aşağıdaki örnek, verileri kabul maaşları sınırlayan bir kısıtlamaya devre dışı bırakır.NOCHECK CONSTRAINT kısıtlamayı devre dışı bırakmak ve genellikle kısıtlamayı ihlal eden bir ekleme için ALTER tablo ile kullanılır.WITH CHECK CHECK KıSıTLAMAYı kısıtlamayı yeniden etkinleştirir ve ayrıca varolan verileri yeniden etkinleştirildikten bağlantısı kısıtlamaya karşı doğrular.

    CREATE TABLE cnst_example 
    (id INT NOT NULL,
        name VARCHAR(10) NOT NULL,
        salary MONEY NOT NULL
        CONSTRAINT salary_cap CHECK (salary < 100000);
    )
    
    -- Disable the constraint.
    ALTER TABLE cnst_example NOCHECK CONSTRAINT salary_cap;
    
    -- Reenable the constraint.
    ALTER TABLE cnst_example WITH CHECK CHECK CONSTRAINT salary_cap;
    

Görünümler, dizinleri devre dışı bırakma

Bir görünümün kümelenmiş dizin fiziksel olarak devre dışı bırakılması, dizin verileri siler.Görünümlerde dizinleri devre dışı bırakmak için aşağıdaki ek kurallar uygulanır:

  • Bir görünümün kümelenmiş dizin devre dışı bırakılması, alttaki değişikliklerin engellemez tablo.

  • Bir görünümün kümelenmiş dizin devre dışı bırakılması bu görünümü kümelenmemiş tüm dizinleri de devre dışı bırakır.

  • Kümelenmiş ve kümelenmemiş dizin için dizin veri satırları silinir.Ancak, görünümü ve dizin tanımları meta veriler kalır ve dizin veya dizinleri yeniden oluþturma yeniden.

  • ALTER INDIS TÜM YENIDEN deyim rebuilds ve dizin, tablodaki tüm dışında devre etkinleştirir görünümlerde dizinleri devre dışı.Ayrı bir INDEX ALTER TÜM YENIDEN deyiminde görünümlerde dizinleri yeniden etkinleştirilmesi gerekir.

  • Bir görünümün kümelenmiş dizin yeniden oluşturma, kümelenmemiş dizin görünümünde otomatik olarak etkinleştirmez.

  • Kümelenmemiş dizin el ile yeniden oluþturma tarafından kümelenmiş dizin yeniden oluþturma sonra etkinleştirilmesi gerekir.

Dizin işlemi çevrimiçi disabled dizinler üzerinde gerçekleştirme

Tablo devre dışı bırakılmış, kümelenmiş dizin varsa, bir çevrimiçi devre dışı bırakılmış kümelenmemiş dizin yeniden oluşturabilirsiniz.Ancak, çevrimdışı, ALTER DIZINI yeniden OLUşTURMAK veya DROP_EXISTING WITH CREATE INDEX deyim kullanırsanız, devre dışı bırakılmış kümelenmiş dizin her zaman yeniden oluşturmanız gerekir.Çevrimiçi dizin işlemleri hakkında daha fazla bilgi için bkz: Çevrimiçi ındex işlemi gerçekleştiriliyor.

Devre dışı dizinler istatistikleri

Dizin devre dışı bırakıldığında dizin istatistikleri için uygulanacak kısıtlamalar:

  • CREATE STATISTICS deyim başarıyla devre dışı bırakılmış kümelenmiş dizin olan bir tabloda yürütülemiyor.

  • AUTO_CREATE_STATISTICS veritabanı seçeneği yeni istatistikler dizinini devre dışı bırakılır ve aşağıdaki koşulların bir sütun oluşturur:

    • AUTO_CREATE_STATISTICS ON olarak ayarlandı

    • Varolan hiçbir sütun istatistiklerini vardır.

    • Istatistikler, sorgu en iyi duruma getirilmesi sırasında gereklidir.

  • sp_autostats Belirtilen tablo devre dışı bırakılmış, kümelenmiş dizin varsa, başarısız olur.

  • sp_updatestats devre dışı bırakılmış bir kümelenmiş dizin istatistikleri güncelleştirin.

  • sp_createstats istatistikleri devre dışı dizin sütunlarından öndeki sütunlarda oluşturur.Ne zaman indexonly belirtilen, istatistikleri bir sütunda oluşturulmaz bir devre dışı dizin sürece, bu sütun, başka bir etkin dizin içinde de kullanılır.

DBCC komutlar

kümelenmiş dizin, dışıysa dbcc checkdb temel alınan tablo bilgileri geri döndüremiyor.Bunun yerine, deyim, kümelenmiş dizin devre dışı bırakıldığını bildiriyor.dbcc indexdefrag devre dışı dizin birleştirmek için kullanılamaz.Deyim bir hata iletisiyle başarısız olur.Kullanabileceğiniz dbcc dbreindex yeniden oluşturmak için bir devre dışı dizin.

Bir disabled dizininin durumunu görüntüleme

Bir dizin veya birincil anahtar veya UNIQUE sınırlaması devre dışı bırakıldığında, tüm etkilenen dizinleri ve yabancı anahtar veya CHECK kısıtlamaları listeleyen bir uyarı iletisi görüntülenir.Ayrıca, bir dizin içinde devre dışı durumunu görüntüleyebilirsiniz sys.Indexes görünümü katalog veya INDEXPROPERTY kullanarak çalışır.yabancı anahtar ve CHECK kısıtlamaları devre dışı durumunu görüntüleyebilirsiniz sys.foreign_keys and sys.CHECK_CONSTRAINTS katalog, sırasıyla görüntüler.Daha fazla bilgi için bkz:Dizin bilgileri görüntüleme.

Örnekler

Devre dışı aşağıdaki örnek bir kümelenmemiş dizin üzerinde bırakır Employee TABLO.

USE AdventureWorks;
GO
ALTER INDEX IX_Employee_ManagerID 
ON HumanResources.Employee DISABLE;