Aracılığıyla paylaş


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

Bir dizin devre dışı bırakma kullanıcı erişimini kümelenmiş dizinleri ve dizin için temel alınan temel alınan tablo verileri için engeller.The SQL Server Veritabanı Altyapısı may automatically disable an index during a upgrade of SQL Server, or you can manually disable an index.Daha fazla bilgi için bkz: Dizinler devre dışı bırakma.

Herhangi bir dizin türü devre dışı bırakılabilir.Bir dizin devre dışı bırakıldığında aşağıdaki kurallar uygulanır:

  • Benzersiz dizin, birincil anahtar veya benzersiz kısıtlama ve dizinlenmiş sütunların diğer tablolardaki başvuran tüm yabancı anahtar kısıtlamalarını devre dışı bırakılır.Dizin devre dışı bırakma kullanıcı bu tablolar üzerinde alter iznine sahip olmalıdır veya alter dizin devre dışı bırakma deyim başarısız olur.Dizinin kümelenmiş olup, arka plandaki üzerindeki tüm gelen ve giden yabancı anahtar kısıtlamalarını temel alınan tablo devre dışı bırakılır.

    Dizin devre dışı bırakıldığında bir uyarı iletisi kısıtlaması adları listelenir.Dizini yeniden oluşturuluyor sonra kısıtlamaları el ile alter tablo check kısıtlaması kullanılarak etkinleştirilmiş olması gerekir deyim.

  • Dizin devre dışı durumdayken korunmaz.

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

  • Varolan bir devre dışı dizin olarak dizin tanımı hala bulunmaktadır çünkü aynı adı kullanan bir dizin oluşturulamıyor meta veriler.

  • devre dışı dizin silinebilir.

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

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

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

  • İlişkili kümelenmiş dizin devre dışı bırakıldığında kümelenmemiş dizinler otomatik olarak devre dışı bırakılır.Bunlar tablo ya da görünüm üzerinde kümelenmiş dizin etkin veya kümelenmiş dizin tablo üzerinde bırakılan kadar etkin duruma getirilemez.Kümelenmiş dizin yeniden alter INDEX tüm oluşturma deyim kullanılarak etkinleştirilmiş olmadıkça kümelenmemiş dizinleri açıkça, etkinleştirilmiş olması gerekir.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:

  • Devre dışı bırakılmış kümelenmiş dizin veri satırlarını dışında bırakma veya Kümelenmiş dizini yeniden oluşturmak için erişilemez durumda.Bu şu demektir:

    • Bu işlemleri başarısız olur: SEÇİN, GÜNCELLEŞTİRMEK, silmek, INSERT, create INDEX, İSTATİSTİKLERİ oluşturma, güncelleştirme İSTATİSTİKLERİ (dizin) ve tablo sütunları veya kısıtlamaları değiştirmek alter table deyimleri.

    • Bu işlemler başarılı olur: Görünüm Oluştur, drop VIEW, create TRIGGER, tetikleyici bırak, drop INDEX, alter tablo ETKİNLEŞTİR/devre dışı bırak tetikleyici, truncate table ve drop table.

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

  • Varolan kümelenmemiş dizinler ve tablo ile ilgili xml dizinler otomatik olarak devre dışı bırakılır ve erişilemiyor.

  • Tablo başvuru görünümlerde kümelenmiş ve kümelenmemiş dizinleri devre dışı bırakılır.Bu dizinler gibi olanlar üzerinde başvurulan tablo yeniden oluşturulması gerekir.

Sınırlamaları devre dışı bırakma

BİRİNCİL anahtar ve yabancı anahtar benzersiz kısıtlamaları devre dışı bırakmak için bu ek yönergeleri uygulayın:

  • BİRİNCİL anahtar ve benzersiz kısıtlamaları Dizin Değiştir devre dışı bırakma deyim kullanarak ilişkili dizin bırakarak devre dışı bırakılır.

  • BİRİNCİL anahtar kısıtlamasını devre dışı bırakıldığında, tüm ilişkili yabancı anahtar kısıtlamaları da devre dışı bırakılır.Bu kısıtlamayı kısıtlaması nocheck seçeneği ayarlama eşdeğerdir.

  • Başvurulan tablolar üzerinde alter veya Denetim izinlerinizin olması gerekir.

  • Bir yabancı anahtar başvurusu bir BASAMAKLI güncelleştirme veya silme eylem bildirilir, ve başvuru olduğunu devre dışı, güncelleştirmeleri veya başvuru için değişiklik yaymak kısıtlama neden delete deyimleri tablo başarısız.

  • Yinelenen değerler yanlışlıkla eklenmesi için bir tablo birincil anahtar veya benzersiz dizin devre dışı durumdayken ya da bir SQL Server yükseltmek, dizine dönüşür devre dışı neden değişikliğine göreDizin başarıyla etkinleştirilmeden önce yinelenen satırları el ile düzeltmeniz gerekir.Aşağıdaki çözümleri olabilir.

    • El ile kaldırabilir veya yinelenen değerleri değiştirebilirsiniz.

    • BENZERSİZ kısıtlama oluşturma sonucunda benzersiz dizin oluşturulmuş, DROP_EXISTING ile dizin oluşturma dizin UNIQUE belirtmeden yeniden oluşturmak için kullanın.

    • Dizin, birincil anahtar veya benzersiz kısıtlama bir byproduct oluşturulduysa, kısıtlamayı bırak gerekir.Dizin, sonra bıraktı.Bir birincil anahtar kısıtlaması için herhangi bir yabancı anahtar kısıtlamaları da bırakılan gerekir.

  • Devre dışı bırakılan FOREIGN key ve onay kısıtlamaları işaretlenir is_not_trusted.Bu sürümlerde sys.check_constraints ve sys.foreign_keys katalog görünümleri.Kısıtlama artık tüm satırlar için sistem tarafından Doğrulanmakta olan, yani tablo.Kısıtlamayı bile yeniden etkinleştirmek, alter tablo ile denetle seçeneğini belirtmediğiniz sürece, varolan satırları tablosu karşı reverify değil.Belirtme ile DENETLEME kısıtlaması güvenilir olarak yeniden işaretler.

    Aşağıdaki örnek veri kabul maaşlarını sınırlayan bir kısıtlaması devre dışı bırakır.KISITLAMASI nocheck alter table ile kısıtlamasını devre dışı bırakma ve genellikle kısıtlamayı ihlal ediyor bir ekleme için izin vermek için kullanılır.İLE denetle DENETLEME SINIRLAMASINI sınırlama yeniden etkinleştirir ve da yeniden kısıtlamaya karşı varolan verilerin geçerliliğini denetler.

    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ümlerde dizinleri devre dışı bırakma

Fiziksel olarak bir görünümde kümelenmiş dizin devre dışı bırakma 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ümde kümelenmiş dizin devre dışı bırakma değil önlemek için temel değişiklikler temel alınan tablo.

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

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

  • Index alter tüm yeniden deyim yeniden oluşturur ve devre dışı dizinler üzerinde görünümler için dışında bir tablo devre dışı bırakılmış tüm dizinlerde etkinleştirir.Dizinler üzerinde görünümler etkinleştirilmiş olmalıdır bir ayrı alter INDEX tüm yeniden deyim.

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

  • Kümelenmemiş dizinleri yeniden oluşturuluyor tarafından kümelenmiş dizin yeniden oluşturuluyor sonra el ile etkinleştirilmelidir.

Dizin işlemleri çevrimiçi devre dışı dizinler üzerinde gerçekleştiriliyor.

Tablo devre dışı bırakılmış kümelenmiş dizin yoksa, devre dışı bırakılan kümelenmemiş dizin çevrimiçi yeniden inşa edebilirsiniz.Ancak, çevrimdışı, alter dizin yeniden oluşturma veya DROP_EXISTING ile dizin oluşturma 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 dizin işlemleri gerçekleştirme.

Devre dışı dizinler üzerinde istatistikleri

Dizin devre dışı bırakıldığında dizin istatistikleri için aşağıdaki kısıtlamalar geçerlidir:

  • create STATISTICS deyim başarıyla üzerinde yürütülemez bir tablo , devre dışı bırakılmış bir kümelenmiş dizini vardır.

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

    • AUTO_CREATE_STATISTICS on olarak küme

    • Sütun için varolan hiçbir istatistikleri vardır.

    • İstatistikler 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 yok güncelleştirme istatistikleri üzerinde devre dışı bırakılmış kümelenmiş dizinler.

  • sp_createstats devre dışı dizin sütunları öndeki sütunlarda istatistikleri oluşturur.Zaman indexonly belirtilmişse, istatistik değil bir sütun üzerinde oluşturulan bir devre dışı dizin sürece bu sütunu başka bir etkin dizin içinde de kullanılır.

dbcc komutlar

kümelenmiş dizin devre dışı bırakılırsa, dbcc checkdb temel alınan temel alınan tablo hakkında bilgi verilemez.Bunun yerine, deyim kümelenmiş dizin devre dışı olduğunu bildirir.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 inşa etmek için bir devre dışı dizin.

Devre dışı bırakılmış dizin durumunu görüntüleme

Bir dizin veya birincil anahtar veya benzersiz kısıtlama devre dışı bırakıldığında, tüm etkilenen dizinler ve kısıtlamalar yabancı anahtarı veya onay listeleri bir uyarı iletisi görüntülenir.Ayrıca, dizin içinde devre dışı durumunu görüntüleyebilirsiniz. sys.indexes Katalog görünümü veya INDEXPROPERTY kullanarak işlev.YABANCI anahtar ve onay kısıtlamalarını devre dışı durumunu görüntüleyebilirsiniz sys.foreign_keys ve sys.check_constraints katalog görünümleri, sırasıyla.Daha fazla bilgi için bkz: Dizin bilgilerini görüntüleme.

Örnekler

Üzerinde kümelenmemiş dizin aşağıdaki örnek devre dışı bırakır Employee tablo.

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