Udostępnij za pośrednictwem


Usuwanie INDEKSU (Transact-SQL)

Ważna informacjaWażne:

Składnia zdefiniowane w <drop_backward_compatible_index> zostaną usunięte w przyszłej wersja programu Microsoft SQL Server.Plan do modyfikowania aplikacji, które aktualnie za pomocą funkcji i uniknąć, używając następującej składni w nowych prac rozwojowych.Należy użyć składni, określone w <drop_relational_or_xml_index> zamiast.Indeksy XML nie można usunąć za pomocą Składnia zgodna z poprzednimi wersjami.

Usuwa jeden lub więcej relacyjnych, przestrzennej, filtrowane, lub indeksy XML z bieżącej bazy danych.Można usunąć indeks klastrowany i przenieść wynikowej tabela do innej grupa plików lub schemat partycji w ramach pojedynczej transakcji przez określenie opcji Przenieś do.

UPUŚĆ INDEX instrukcja nie dotyczą indeksy utworzone przez określenie klucza podstawowego ani ograniczenia UNIQUE.Aby usunąć ograniczenie i odpowiedni indeks, użyj ALTER TABLE z instrukcji DROP CONSTRAINT klauzula.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

DROP INDEX
{ <drop_relational_or_xml_or_spatial_index> [ ,...n ] 
| <drop_backward_compatible_index> [ ,...n ]
}

<drop_relational_or_xml_or_spatial_index> ::=
    index_name ON <object> 
    [ WITH ( <drop_clustered_index_option> [ ,...n ] ) ]

<drop_backward_compatible_index> ::=
    [ owner_name. ] table_or_view_name.index_name

<object> ::=
{
    [ database_name. [ schema_name ] . | schema_name. ] 
    table_or_view_name
}

<drop_clustered_index_option> ::=
{
    MAXDOP = max_degree_of_parallelism
  | ONLINE = { ON | OFF }
  | MOVE TO { partition_scheme_name ( column_name ) 
            | filegroup_name
            | "default" 
            }
  [ FILESTREAM_ON { partition_scheme_name 
            | filestream_filegroup_name 
            | "default" } ]
}

Argumenty

  • index_name
    Jest to nazwa indeksu ma być przerwane.

  • nazwa_bazy_danych
    Jest to nazwa bazy danych.

  • schema_name
    Jest to nazwa schematu, do której należy dany tabela lub widoku.

  • table_or_view_name
    Jest nazwą tabela lub widoku skojarzonego z indeksu.Indeksy przestrzennej są obsługiwane tylko w tabelach.

    Aby wyświetlić raport indeksy dla obiektu, użyj sys.indexes katalogu widoku.

  • <drop_clustered_index_option>
    Określa opcje indeks klastrowany .Te opcje nie można używać z innymi typami indeksu.

  • MAXDOP =max_degree_of_parallelism
    Zastępuje maksymalny stopień równoległości prostychopcjakonfiguracja na czas trwania operacji indeksu. Aby uzyskać więcej informacji, zobacz maksymalny stopień równoległości prostych opcji.MAXDOP służą do ograniczania liczby procesorów używanych w realizacji planu równoległego.Maksymalna to 64 procesorów.

    Ważna informacjaWażne:

    MAXDOP nie jest dozwolone dla indeksów w przestrzenną lub indeksy XML.

    max_degree_of_parallelismmoże być:

    • 1
      Pomija generowanie planu równoległego.

    • >1
      Ogranicza maksymalną liczbę procesorów używanych w operacji indeksu równolegle do określonej liczby.

    • 0 (domyślnie)
      Używa rzeczywista liczba procesorów lub mniej oparte na bieżącym obciążenia systemu.

    Aby uzyskać więcej informacji, zobacz Konfigurowanie operacji równoległych indeksu.

    Ostrzeżenie

    Indeksu równoległa operacje są dostępne tylko w SQL Server wersji Enterprise, Developer i oceny.

  • ONLINE = ON | OFF
    Określa, czy tabele podstawowe i indeksy skojarzone są dostępne do modyfikacji kwerendy i danych podczas operacji indeksu.Domyślnie jest wyłączona.

    • NA
      Długoterminowej blokady tabela nie są aktywne.Dzięki temu kwerendy lub aktualizacje do podstawowej tabela , aby kontynuować.

    • WYŁĄCZANIE
      Są stosowane blokady tabeli i tabela jest niedostępny przez czas trwania operacji indeksu.

    Opcja ONLINE można określić tylko po upuszczeniu indeksów klastrowanych.Aby uzyskać więcej informacji zobacz sekcję Spostrzeżenia.

    Ostrzeżenie

    Operacje indeksu online są dostępne tylko w SQL Server wersji Enterprise, Developer i oceny.

  • MOVE TO { partition_scheme_name**(** column_name**)** | filegroup_name | "domyślną""
    Określa lokalizację, aby przenieść wiersze danych znajdujących się aktualnie w liść poziom indeks klastrowany.Dane jest przenoszony do nowej lokalizacji w formularzu sterty.schemat partycji lub grupa plików można określić jako nowej lokalizacji, ale schemat partycji lub grupa plików musi już istnieć.Przenieś do jest nieprawidłowy dla widoków indeksowanych lub zbudowania indeksów nie klastrowanych.Jeżeli nie określono schemat partycji lub grupa plików , wynikowej tabela zostanie umieszczony w tym samym schemat partycji lub grupa plików , jak został zdefiniowany dla indeks klastrowany.

    Po przerwaniu indeks klastrowany za pomocą PRZENOSZENIA, odbudowa zbudowania indeksów w tabela bazowa , ale pozostają w ich oryginalnym aplikacjami lub schematy partycji.tabela bazowa zostanie przeniesiony do innej grupa plików lub schemat partycji, zbudowania indeksów nie są przenoszone do zbiega się z nową lokalizację tabela bazowa (stosu).W związku z tym nawet jeżeli indeks klastrowanywcześniej były wyrównane do zbudowania indeksów, ich może już być wyrównane sterty.Aby uzyskać więcej informacji na temat indeks partycjonowany wyrównaniezobacz Specjalne wytyczne dla indeksów podzielonym na partycje.

    • partition_scheme_name ()column_name )
      Określa schemat partycji jako lokalizacja wynikowej tabela.schemat partycji musi zostały już utworzone przez wykonywanie albo Schemat tworzenia PARTYCJI lub Zmienić schemat PARTYCJI.Jeśli określona lokalizacja nie jest podzielony na partycje tabela , tabela jest uwzględniona w ten sam schemat partycji jako istniejący indeks klastrowany.

      Nazwa kolumna w schemacie nie jest ograniczone do kolumn w definicji indeksu.Można określić kolumna tabela bazowa .

    • filegroup_name
      Określa grupa plików jako lokalizacja wynikowej tabela.Jeśli lokalizacja nie jest określona tabela nie jest podzielony na partycje, wynikowej tabela znajduje się w tej samej grupa plików jako indeks klastrowany.grupa plików musi już istnieć.

    • "domyślną""
      Określa domyślną lokalizacją wynikowej tabela.

      Ostrzeżenie

      W tym kontekście domyślnie nie jest słowem kluczowym.Jest to identyfikator domyślnej grupa plików i musi rozdzielane w Przenieś do "domyślne" lub Przenieś do domyślne[].Jeśli "domyślną" określono opcję QUOTED_IDENTIFIER musi być zestaw w bieżącej sesja.Jest to ustawienie domyślne.Aby uzyskać więcej informacji, zobacz ZESTAW QUOTED_IDENTIFIER (Transact-SQL).

  • FILESTREAM_ON { partition_scheme_name | filestream_filegroup_name | "default" }
    Określa lokalizację, aby przenieść FILESTREAM tabela , która obecnie jest liść poziom indeks klastrowany.Dane jest przenoszony do nowej lokalizacji w formularzu sterty.schemat partycji lub grupa plików można określić jako nowej lokalizacji, ale schemat partycji lub grupa plików musi już istnieć.NA FILESTREAM nie jest prawidłowy dla widoków indeksowanych lub zbudowania indeksów nie klastrowanych.Jeżeli nie określono schemat partycji , jak został zdefiniowany dla indeks klastrowanydo tego samego schemat partycji zostanie umieszczony danych.

    • partition_scheme_name
      Określa schemat partycji danych FILESTREAM.schemat partycji musi zostały już utworzone przez wykonywanie albo Schemat tworzenia PARTYCJI lub Zmienić schemat PARTYCJI.Jeśli określona lokalizacja nie jest podzielony na partycje tabela , tabela jest uwzględniona w ten sam schemat partycji jako istniejący indeks klastrowany.

      Jeśli określisz schemat partycji dla Przenieś do należy użyć tego samego schemat partycji w sprawie FILESTREAM.

    • filestream_filegroup_name
      Określa FILESTREAM grupa plików danych FILESTREAM.Jeśli lokalizacja nie jest określona tabela nie jest podzielony na partycje, danych znajduje się w FILESTREAM domyślnej grupa plików.

    • "domyślną""
      Określa domyślną lokalizację danych FILESTREAM.

      Ostrzeżenie

      W tym kontekście domyślnie nie jest słowem kluczowym.Jest to identyfikator domyślnej grupa plików i musi rozdzielane w Przenieś do "domyślne" lub Przenieś do domyślne[].Jeśli "domyślny" jest określony, opcja QUOTED_IDENTIFIER musi być w bieżącej sesja.Jest to ustawienie domyślne.Aby uzyskać więcej informacji, zobacz ZESTAW QUOTED_IDENTIFIER (Transact-SQL).

Uwagi

Po upuszczeniu indeks nieklastrowany definicji indeksu jest usuwany z metadane i stron danych indeksu ( B-drzewo) są usuwane z plików bazy danych.Po upuszczeniu indeks klastrowany definicji indeksu jest usuwany z metadane i wiersze danych przechowywane w liść poziom indeks klastrowany są przechowywane w nieuporządkowana wynikowej tabela, sterty.Miejsce zajęte wcześniej przez indeks jest odzyskany.To miejsce można następnie używane dla dowolnego obiektu bazy danych.

Indeks nie można usunąć, jeśli grupa plików , w którym znajduje się jest w trybie offline lub zestaw tylko do odczytu.

Po upuszczeniu indeksowany widok indeks klastrowany nieklastrowany wszystkie indeksy i automatycznego tworzenia statystyk dotyczących tego samego widoku są automatycznie usuwane.Ręczne tworzenie statystyki nie są usuwane.

Składniatable_or_view_name**.**index_name jest utrzymywana zgodność z poprzednimi wersjami.Indeks XML lub przestrzennej indeksu nie można usunąć za pomocą Składnia zgodna z poprzednimi wersjami.

Gdy zostanie usunięte indeksy z zakresów 128 lub więcej, Aparat baz danych podporządkowuje deallocations rzeczywista strona i ich skojarzone blokady, aż po zatwierdzenia transakcji.Aby uzyskać więcej informacji, zobacz Upuszczanie i odbudowując dużych obiektów.

Czasami indeksy są opuszczane, a utworzony do reorganizacji lub odbudować indeks, takie jak zastosowanie nowych wartości współczynnik wypełnienia lub reorganizowanie danych po ładowanie zbiorcze.Aby to zrobić, używając Zmianę INDEKSUjest bardziej wydajny, szczególnie dla indeksów klastrowanych.ZMIENIA ODBUDOWAĆ indeks ma optymalizacje zapobiec napowietrznej odbudowywania zbudowania indeksów.

Korzystając z opcji z INDEKSEM UPUSZCZANIA

Można zestaw następujące opcje indeksu po upuszczeniu indeks klastrowany: MAXDOP ONLINE i Przenieś do.

Umożliwia przenoszenie porzucić indeks klastrowany i przenieść wynikowej tabela do innej grupa plików lub schemat partycji w ramach pojedynczej transakcji.

Po określeniu ONLINE = ON kwerend i zmiany w danych źródłowych i skojarzone ponownego zbudowania indeksów nie są blokowane przez transakcję UPUŚĆ INDEKSU.Tylko jeden indeks klastrowany można upuszczać online w czas.Pełny opis opcji ONLINE, zobacz CREATE INDEX (Transact-SQL).

Nie można usuwać indeks klastrowany online Jeżeli indeks jest wyłączona w widoku lub zawiera text, ntext, image, varchar(max), nvarchar(max), varbinary(max), lub xml kolumn liść-poziom danych wierszy.

Za pomocą ONLINE = ON i przejdź do opcji wymaga dodatkowego tymczasowego miejsca na dysku.Aby uzyskać więcej informacji, zobacz Określanie wymagań dotyczących miejsca na dysku indeksu.

Po przerwaniu Indeks stosu wynikowy pojawia się w sys.indexes widok o wartości NULL w katalogu nazwy kolumna.Aby wyświetlić nazwę tabela łączyć sys.indexes z sys.tables na object_id.Aby przykładowa kwerenda Zobacz przykład D.

Na komputerach wieloprocesorowych, które są uruchomione SQL Server 2005 Enterprise Edition lub nowszej, UPUŚĆ INDEKSU może używać więcej procesorów do skanowania i sortowania operacje związane z usuwaniem indeks klastrowany, podobnie jak inne wykonania kwerendy.Liczba procesorów, które są używane do uruchamiania UPUŚĆ INDEX instrukcja przez określenie opcji MAXDOP indeksu można konfigurować ręcznie.Aby uzyskać więcej informacji, zobacz Konfigurowanie operacji równoległych indeksu.

Po upuszczeniu indeks klastrowany odpowiednie partycje sterty zachować ich ustawienie kompresji danych, chyba że modyfikacji schematu partycjonowanie .Po zmianie schematu partycjonowanie odbudowa wszystkie partycje do stanu bez kompresji (DATA_COMPRESSION = brak).Aby usunąć indeks klastrowany i zmienić partycjonowanie schemat wymaga następujących dwóch kroków:

  1. Usuwanie indeks klastrowany.

  2. Modyfikowanie tabela przy użyciu instrukcji ALTER TABLE...ODBUDUJ...Opcja określenie opcji kompresji.

Po upuszczeniu indeks klastrowany w trybie OFFLINE zostaną usunięte tylko wyższe poziomy indeksów klastrowanych; Dlatego operacja jest dość szybko.Po upuszczeniu indeks klastrowany w trybie ONLINE, SQL Server odbudowuje sterty dwa razy, raz w kroku 1, a raz w kroku 2.Aby uzyskać informacje o kompresji danych, zobacz Tworzenie skompresowanego tabel i indeksów.

Indeksy XML

Nie można określić opcje, po upuszczeniuXML indeksu.Ponadto, nie można używać table_or_view_name**.**index_name składni.Po upuszczeniu indeksu głównego XML skojarzony pomocniczy indeksy XML są automatycznie usuwane.Aby uzyskać więcej informacji, zobacz Indeksy na kolumnach typu danych XML.

Indeksy przestrzenne

Indeksy przestrzennej są obsługiwane tylko w tabelach.Po upuszczeniu przestrzennej indeksu nie określ wszelkie opcje lub użyj **.**index_name.Poprawna składnia jest następująca:

Indeks UPUSZCZANIA spatial_index_name na spatial_table_name;

Aby uzyskać więcej informacji na temat indeksów przestrzennej zobacz Praca z indeksy przestrzenne (aparat bazy danych).

Uprawnienia

wykonać UPUŚĆ INDEKSU co najmniej wymagane jest uprawnienie zmiany w tabela lub widoku.To uprawnienie jest przyznawane domyślnie sysadmin stała rola serwera i db_ddladmin i db_owner ról stałej bazy danych.

Przykłady

A.Upuszczanie indeksu

W następującym przykładzie usunięto indeksu IX_ProductVendor_VendorID na ProductVendor tabela.

USE AdventureWorks2008R2;
GO
DROP INDEX IX_ProductVendor_BusinessEntityID 
    ON Purchasing.ProductVendor;
GO

B.Usuwanie wielu indeksów

W następującym przykładzie usunięto dwa indeksy w ramach pojedynczej transakcji.

USE AdventureWorks2008R2;
GO
DROP INDEX
    IX_PurchaseOrderHeader_EmployeeID ON Purchasing.PurchaseOrderHeader,
    IX_Address_StateProvinceID ON Person.Address;
GO

C.Upuszczanie indeks klastrowany online i ustawienie opcji MAXDOP

W następującym przykładzie usunięto indeks klastrowany z ONLINE opcja zestaw jako ON i MAXDOP zestaw na 8.Ponieważ nie określono opcję Przenieś do, wynikowej tabela są przechowywane w tej samej grupa plików jako indeks.

Ostrzeżenie

W tym przykładzie, które mogą być wykonywane tylko w SQL Server 2005 Enterprise Edition lub nowszej.

USE AdventureWorks2008R2;
GO
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);
GO

D.Upuszczanie indeks klastrowany online i przenoszenie tabela w nowej grupa plików

Poniższy przykład powoduje usunięcie indeks klastrowany online i przenosi grupa plikówwynikowej tabela (sterty)NewGroup za pomocą MOVE TOklauzula. sys.indexes, sys.tables, I sys.filegroupswidoki wykazu będą proszeni o Sprawdź położenie indeksu i tabela w aplikacjami przed i po zakończeniu przenoszenia.

USE AdventureWorks2008R2;
GO
--Create a clustered index on the PRIMARY filegroup if the index does not exist.
IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name = 
            N'AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate')
    CREATE UNIQUE CLUSTERED INDEX
        AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials (ProductAssemblyID, ComponentID, 
        StartDate)
    ON 'PRIMARY';
GO
-- Verify filegroup location of the clustered index.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
    i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
    JOIN sys.tables as t ON i.object_id = t.object_id
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')
GO
--Create filegroup NewGroup if it does not exist.
IF NOT EXISTS (SELECT name FROM sys.filegroups
                WHERE name = N'NewGroup')
    BEGIN
    ALTER DATABASE AdventureWorks2008R2
        ADD FILEGROUP NewGroup;
    ALTER DATABASE AdventureWorks2008R2
        ADD FILE (NAME = File1,
            FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\File1.ndf')
        TO FILEGROUP NewGroup;
    END
GO
--Verify new filegroup
SELECT * from sys.filegroups;
GO
-- Drop the clustered index and move the BillOfMaterials table to
-- the Newgroup filegroup.
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials 
    WITH (ONLINE = ON, MOVE TO NewGroup);
GO
-- Verify filegroup location of the moved table.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
    i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
    JOIN sys.tables as t ON i.object_id = t.object_id
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');
GO

E.Upuszczanie ograniczenia PRIMARY KEY online

Indeksy są tworzone jako wynik utworzenia ograniczenia na klucz podstawowy lub unikatowe nie można usunąć za pomocą INDEKSU UPUSZCZANIA.One są usuwane przy użyciu instrukcji ALTER tabeli DROP CONSTRAINT instrukcja.Aby uzyskać więcej informacji, zobacz ALTER TABLE.

W następującym przykładzie usunięto indeks klastrowany z ograniczeniem klucza podstawowego przez upuszczenie ograniczenie.ProductCostHistorytabela ma bez ograniczeń klucza OBCEGO. Jeśli został, te ograniczenia musiałaby najpierw usuwane.

USE AdventureWorks2008R2;
GO
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
ALTER TABLE Production.TransactionHistoryArchive
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
WITH (ONLINE = ON);

GO

F.Upuszczanie indeksu XML

Poniższy przykład spadnie indeksu XML na ProductModel tabela.

USE AdventureWorks2008R2;
GO
DROP INDEX PXML_ProductModel_CatalogDescription 
    ON Production.ProductModel;
GO

G.Upuszczanie na FILESTREAM tabela indeks klastrowany

Poniższy przykład powoduje usunięcie indeks klastrowany online i przenosi wynikowej tabela (sterty) i FILESTREAM danych do MyPartitionScheme schemat partycji przy użyciu obu MOVE TO klauzula i FILESTREAM ON klauzula.

USE MyDatabase;
GO
DROP INDEX PK_MyClusteredIndex 
    ON dbo.MyTable 
    MOVE TO MyPartitionScheme
    FILESTREAM_ON MyPartitionScheme;
GO