Udostępnij za pośrednictwem


Wytyczne dotyczące wyłączania indeksy i ograniczenia

Wyłączenie indeksu uniemożliwia dostęp użytkownika do indeksu i indeksy klastrowane tabela źródłowa danych. Aparat baz danych programu SQL Server Może automatycznie wyłączyć indeksu podczas uaktualniania z SQL Server, lub można ręcznie wyłączyć indeks.Aby uzyskać więcej informacji, zobacz Wyłączanie indeksów.

Dowolny typ indeksu można wyłączyć.Gdy indeks jest wyłączona, stosuje się następujące zasady:

  • Jeżeli indeks jest unikatowy, klucz podstawowy lub unikatowe ograniczenie i wszystkie ograniczenia klucza OBCEGO, które odwołują się do kolumn indeksowanych z innych tabel są wyłączone.Wyłączenie indeksu użytkownika musi mieć uprawnienia do zmiany tych tabel lub instrukcja ALTER wyłączyć INDEKSU nie powiedzie się.Jeżeli indeks jest klastrowany, wszystkie ograniczenia klucza OBCEGO przychodzących i wychodzących na tabela źródłowa są wyłączone.

    Ograniczenia nazw są wymienione w komunikat ostrzegawczy, gdy indeks jest wyłączony.Po przebudowywanie indeksu, ograniczenia muszą być włączone ręcznie przy użyciu instrukcja ALTER ograniczenia CHECK tabeli.

  • Indeks nie jest zachowywane, gdy jest wyłączone.

  • Podczas tworzenia kwerendy wykonanie planów optymalizator kwerendy nie traktuje indeksu.Ponadto nie kwerend odwołujących się do wyłączony indeks z tabela wskazówkę.

  • Nie można utworzyć indeks, który wykorzystuje tę samą nazwę jak istniejący wyłączony indeks, ponieważ definicja indeksu nadal istnieje metadane.

  • Można upuszczać wyłączony indeks.

Wyłączenie ponownego zbudowania indeksów

Wyłączanie indeks nieklastrowany fizycznie usuwa dane indeksu.Jednak definicja indeksu pozostaje metadane.Wyłączenie ponownego zbudowania indeksów stosuje się następujące dodatkowe wytyczne:

  • Statystyki dotyczące indeksu pozostają na miejscu i automatycznie aktualizowane w razie potrzeby.

  • Zbudowania indeksów są automatycznie wyłączane, gdy skojarzony indeks klastrowany jest wyłączona.Nie można włączyć aż do klastrowanego indeksu na tabela lub widoku jest włączona lub porzucone indeks klastrowany w tabela.Zbudowania indeksów nie klastrowanych musi być jawnie włączone, chyba że indeks klastrowany zostało włączone przy użyciu instrukcja ALTER wszystkich ODBUDOWANIE INDEKSU.Aby uzyskać więcej informacji, zobacz Zasady dotyczące włączania indeksy i ograniczenia.

Wyłączanie indeksów klastrowanych

Wyłączenie indeksów klastrowanych stosuje się następujące dodatkowe wytyczne:

  • Z wyjątkiem drop lub odbudować indeks klastrowany nie uzyskać dostępu do wierszy danych wyłączone indeksu klastrowanego.To oznacza:

    • Operacje te nie powiedzie się: Wybierz, AKTUALIZACJĘ, usuwanie, WSTAW CREATE INDEX, tworzenie statystyk, statystyki aktualizacji (indeks) i instrukcji ALTER tabela, które zmodyfikować kolumny tabela lub ograniczenia.

    • Te operacje powiedzie się: Utwórz widok, UPUŚĆ WIDOKU, tworzenia WYZWALACZA, UPUŚĆ WYZWALACZA, UPUŚĆ INDEKSU, zmieniać WYZWALACZA Włączanie i wyłączanie, OBCIĄĆ tabelę i DROP TABLE.

    • Nie można utworzyć zbudowania indeksów nie klastrowanych wyłączeniu indeks klastrowany.

  • Istniejące zbudowania indeksów i indeksów XML skojarzony z tabela są automatycznie wyłączane, a nie jest dostępny.

  • Wszystkie indeksy klastrowane i nieklastrowany widoków, które odwołują się do tabela są wyłączone.Indeksy te muszą przebudowany tak jak w tabela.

Wyłączanie ograniczenia

Te dodatkowe wytyczne dotyczą wyłączenie klucz podstawowy, klucz OBCY i ograniczeń UNIQUE:

  • Ograniczenia klucza podstawowego i unikatowe są wyłączone, wyłączając indeksu skojarzona przy użyciu instrukcja ALTER wyłączyć INDEKSU.

  • Gdy ograniczenie na klucz podstawowy jest wyłączona, wszystkie skojarzone ograniczenia klucza OBCEGO są również wyłączone.Jest to równoważne z ustawieniem opcji NOCHECK ograniczenie na ograniczenie.

  • Odwołanie tabel musi mieć uprawnienia ALTER lub FORMANTU.

  • KASKADOWO AKTUALIZUJ lub usuń akcja jest zadeklarowana na odwołania do klucz obcy, że odwołanie jest wyłączone aktualizacje lub usuwanie instrukcji, które mogłoby spowodować ograniczenie do propagowania modyfikacji do tabela odwołujący się nie powiedzie.

  • Zduplikowane wartości mogą być przypadkowo dodawane do tabela podczas indeks klucza podstawowego lub UNIQUE jest wyłączony lub w SQL Server uaktualnienia, zmiana, która spowodowała indeksu zostać wyłączone.Zduplikowane wiersze należy poprawić ręcznie, zanim indeksu można włączyć pomyślnie.Możliwe są następujące rozwiązania:

    • Ręcznie usuń lub zmień wartości zduplikowanych.

    • Indeks unikatowy nie został utworzony w wyniku tworzenia ograniczenia typu UNIQUE, należy użyć utworzyć indeks Z DROP_EXISTING do odtworzenia bez określania unikatowy indeks.

    • Jeśli indeks został utworzony jako byproduct klucz podstawowy lub ograniczenie typu UNIQUE, należy upuścić ograniczenie.Indeks jest następnie przenoszony.Ograniczenia klucza podstawowego muszą również usunięte ograniczenia klucza OBCEGO.

  • Ograniczenia klucza OBCEGO i wyboru, które są wyłączone są oznaczone is_not_trusted.Są one widoczne w sys.check_constraints i sys.foreign_keys widoki wykazu.Oznacza to, że ograniczenie nie jest już weryfikowany przez system dla wszystkich wierszy w tabela.Nawet w przypadku, gdy wyłączonych ograniczenie go będzie nie reverify istniejących wierszy w tabela chyba że zostanie określona opcja Z Sprawdź ALTER tabela.Określanie Z Sprawdź ponownie oznacza ograniczenie jako zaufane.

    Następujący przykład wyłącza ograniczenie ogranicza wynagrodzeń, przyjęta w danych.OGRANICZENIE NOCHECK jest używana z ALTER TABLE wyłączyć ograniczenie i umożliwić wstawkę zazwyczaj naruszyłoby ograniczenie.Z Sprawdź ograniczenia CHECK ponownie włącza ograniczenie, a także sprawdza poprawność danych istniejących przed ponownego włączenia ograniczenie.

    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;
    

Wyłączanie indeksów dla widoków

Wyłączanie indeks klastrowany w widoku fizycznie usuwa dane indeksu.Następujące dodatkowe wytyczne dotyczą wyłączenie indeksy w widokach:

  • Wyłączenie indeks klastrowany w widoku nie uniemożliwia modyfikacje tabela źródłowa.

  • Wyłączanie indeks klastrowany w widoku wyłącza także wszelkie zbudowania indeksów tego widoku.

  • Skreśla się wiersze danych indeksu dla indeksów klastrowanych i nieklastrowany.W definicji widoku i indeks pozostają metadane i mogą być odtwarzane przez odbudowanie indeksu lub indeksy.

  • Instrukcja ALTER wszystkich ODBUDOWAĆ indeks odbudowuje i włącza wszystkie indeksy wyłączone na tabela, z wyjątkiem dla niepełnosprawnych indeksów w widokach.Indeksy widoków musi być włączony w oddzielnych instrukcja ALTER wszystkich ODBUDOWANIE INDEKSU.

  • Przebudowywanie indeks klastrowany w widoku nie powoduje automatycznego włączenia w widoku ponownego zbudowania indeksów.

  • Zbudowania indeksów muszą być włączone ręcznie przez ich odbudowy po przebudowywanie indeks klastrowany.

Wykonywanie operacji indeksu Online na indeksy wyłączone

Można odbudować online wyłączone indeks nieklastrowany, gdy tabela nie jest wyłączone indeks klastrowany.Zawsze musi jednak odbudować indeks klastrowany wyłączone, offline, jeśli użyć instrukcja ALTER ODBUDOWAĆ indeks albo utworzyć indeks Z DROP_EXISTING.Aby uzyskać więcej informacji dotyczących operacji indeksu online, zobacz Wykonywanie operacji indeks w trybie Online.

Statystyki dotyczące indeksy wyłączone

Następujące ograniczenia dotyczące statystyka indeksu, gdy indeks jest wyłączone:

  • Instrukcja tworzenia statystyk nie pomyślnie wykonać na tabela, która ma wyłączone indeks klastrowany.

  • Opcję bazy danych AUTO_CREATE_STATISTICS tworzy nowe statystyki na kolumna gdy indeks jest wyłączony i następujące warunki:

    • AUTO_CREATE_STATISTICS jest zestaw on

    • Nie ma żadnych istniejących statystyk dla kolumna.

    • Statystyki są wymagane podczas optymalizacji kwerendy.

  • sp_autostats nie powiedzie się podczas określonej tabela ma wyłączone indeks klastrowany.

  • sp_updatestats nie powoduje aktualizacja statystyki dotyczących indeksów klastrowanych wyłączone.

  • sp_createstats tworzy statystyki kolumn, które mogą prowadzące kolumny wyłączony indeks.Po indexonly jest określony w kolumnie nie są tworzone statystyki wyłączony indeks , chyba że kolumna jest również używana w innym włączonego indeksu.

Polecenia DBCC

Jeżeli indeks klastrowany zostanie wyłączona, dbcc checkdb nie może zwrócić informacji o tabela źródłowa.Natomiast instrukcja raporty, że indeks klastrowany jest wyłączona.DBCC INDEXDEFRAG nie można defragmentować wyłączony indeks.Instrukcja nie powiedzie się komunikat o błędzie.Można użyć dbcc dbreindex odbudować wyłączony indeks.

Przeglądanie stanu indeksu wyłączone

Po wyłączeniu indeks lub klucz podstawowy lub unikatowe ograniczenie jest wyświetlany komunikat ostrzegawczy, który wyświetla wszystkie indeksy usterce i ograniczeń klucza OBCEGO lub wyboru.Ponadto można wyświetlić stan wyłączone indeksu w sys.indexes wykazu widoku lub funkcja za pomocą INDEXPROPERTY.Można wyświetlić stan wyłączone ograniczenia klucza OBCEGO i wyboru w sys.foreign_keys i sys.check_constraints widoki wykazu, odpowiednio.Aby uzyskać więcej informacji, zobacz Wyświetlanie informacji o indeksie.

Przykłady

Następujący przykład wyłącza indeks nieklastrowany na Employee tabela.

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