Megosztás a következőn keresztül:


DROP INDEX (Transact-SQL)

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW)SQL adatbázis a Microsoft Fabric-ben

Eltávolít egy vagy több relációs indexet, térbe, szűrt vagy XML indexet a jelenlegi adatbázisból. Le lehet dobni egy klaszterelt indexet, és áthelyezheted a kapott táblát egy másik fájlcsoportra vagy partíciós sémára egyetlen tranzakcióban, ha megadod az MOVE TO opciót.

Ez az DROP INDEX állítás nem vonatkozik olyan indexekre, amelyeket definifikációval PRIMARY KEY vagy UNIQUE korlátozásokkal hoztak létre. A korlátozás és a hozzá tartozó index eltávolításához használjuk az ALTER TABLE billentyűt a mellékszereplővel DROP CONSTRAINT .

Fontos

A bent <drop_backward_compatible_index> definiált szintaxist eltávolítják az SQL Server jövőbeli verziójában. Kerüld ezt a szintaxist az új fejlesztési munkákban, és tervezd meg a jelenleg ezt a funkciót használó alkalmazások módosítását. Helyette az alábbiakban <drop_relational_or_xml_or_spatial_index> megadott szintaxist használd. Az XML indexeket visszafelé kompatibilis szintaxissal nem lehet megszüntetni.

Transact-SQL szintaxis konvenciók

Szemantika

SQL Server szintaxisa (az Azure SQL Database-re vonatkozik, kivéve a fájlcsoportot és a fájlfolyamot).

DROP INDEX [ IF EXISTS ]
{ <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.table_or_view_name | schema_name.table_or_view_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" } ]
}

Az Azure SQL Database szintaxisa.

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

<drop_relational_or_xml_or_spatial_index> ::=
    index_name ON <object>

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

Az Azure Synapse Analytics and Analytics Platform System (PDW) szintaxisa.

DROP INDEX index_name ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ; ]

Arguments

HA LÉTEZIK

A: SQL Server 2016 (13.x) és újabb verziókra vonatkozik.

Feltételesen csak akkor ejti el az indexet, ha már létezik.

index_name

Az index nevét, amit el kell dobni.

database_name

Az adatbázis neve.

schema_name

Annak a sémának a neve, amelyhez a tábla vagy nézet tartozik.

table_or_view_name

Az indexhez tartozó tábla vagy nézet neve. A térbeli indexek csak táblázatokon támogatottak.

Az összes indexről szóló részletek megtekintéséhez használja a sys.indexes katalógus nézetet.

Az Azure SQL Database támogatja a háromrészes névformátumot: database_name.schema_name.object_name mikor database_name van az aktuális adatbázis, vagy a database_name tempdb és object_name kezdődik vagy ###.

<drop_clustered_index_option>

Érvényes: SQL Server 2008 (10.0.x) és későbbi verziók, SQL Database.

Irányítja a klaszterelt indexopciókat. Ezek az opciók más indextípusoknál nem használhatók.

MAXDOP = max_degree_of_parallelism

Érvényes: SQL Server 2008 (10.0.x) és újabb verziók, SQL Database (csak P2 és P3 teljesítményszintek).

Felülírja a max degree of parallelism konfigurációs opciót az index művelet során. További információért lásd: Configure the max degree of parallelism (szerver konfigurációs opció). Használd MAXDOP az index építési műveletben használt processzorok számának korlátozására. A maximális érték 64 processzor.

Fontos

MAXDOP nem engedélyezett térbeli vagy XML indexekhez.

max_degree_of_parallelism az alábbi értékek egyike lehet.

Érték Description
1 Elnyomja a párhuzamos tervgenerálást
>1 Korlátozza a párhuzamos indexépítési műveletben használt maximális processzorok számát a megadott számra
0 (alapértelmezett) A tényleges processzorok számát vagy annál kevesebbet használja az aktuális rendszerterhelés alapján

További információ: Párhuzamos indexelési műveletek konfigurálása.

Megjegyzés:

A párhuzamos indexműveletek nem érhetők el az SQL Server minden kiadásában. Az SQL Server kiadásai által támogatott funkciók listáját az SQL Server 2022 Kiadásai és támogatott funkciói című témakörben találja.

ONLINE = ON | KI

Alkalmazható: SQL Server 2008 (10.0.x) és későbbi verziók, Azure SQL Database.

Megadja, hogy a mögöttes táblák és a kapcsolódó indexek elérhetők-e a lekérdezésekhez és az adatok módosításához az indexművelet során. Az alapértelmezett érték a OFF.

  • ON: Hosszú távú asztalzárak nem tartják meg. Ez lehetővé teszi a lekérdezések vagy frissítések folytatását az alapul szolgáló táblaban.

  • OFF: Táblázatzárak vannak bevezetve, és a tábla nem elérhető az index művelet során.

Ez ONLINE az opció csak akkor van megadva, ha elhagyod a klaszterelt indexeket. További információ: Megjegyzések szakasz.

Megjegyzés:

Az online indexelési műveletek nem érhetők el az SQL Server minden kiadásában. Az SQL Server kiadásai által támogatott funkciók listáját az SQL Server 2022 Kiadásai és támogatott funkciói című témakörben találja.

ÁTHELYEZÉS { partition_scheme_name ( column_name ) | filegroup_name | "alapértelmezett" }

A: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik. Az SQL Database támogatja "default" a fájlcsoport neve.

Megad egy helyet azok az adatsorok áthelyezésére, amelyek jelenleg a klaszterelt index levélszintjén vannak. Az adatokat egy halom formájában helyezik át az új helyre. Megadhatsz egy partíciós sémát vagy fájlcsoportot új helyként, de a partíciós séma vagy fájlcsoport már léteznie kell. MOVE TO nem érvényes indexelt nézetekre vagy nem konklúziós indexekre. Ha nincs megadva egy partíciós séma vagy fájlcsoport, akkor az eredmény tábla ugyanabban a partíciós sémában vagy fájlcsoportban található, mint ahogy a klaszterizált indexhez is definiálták.

Ha egy klaszterelt indexet kihagyunk , MOVE TOaz alaptáblán lévő nem klaszterelt indexeket újraépítik, de azok eredeti fájlcsoportjukban vagy partíciós sémáikban maradnak. Ha az alaptáblát egy másik fájlcsoportra vagy partíciós sémára helyezzük, a nem klaszterizált indexek nem kerülnek át, hogy egybeesjenek az alaptábla (halom) új helyével. Ezért, még ha a nem klaszterelt indexek korábban is voltak a klaszterezett indexgel, előfordulhat, hogy már nem is lesznek összehangolva a halommal. A particionált indexek igazításáról további információt a particionált táblák és indexek című témakörben talál.

partition_scheme_name ( column_name )

Érvényes: SQL Server 2008 (10.0.x) és későbbi verziók, SQL Database.

Megad egy partíciós sémát a kapott tábla helyének. A partíciós sémát már létre kell hozni, vagy a CREATE PARTITION SCHEME , vagy az ALTER PARTITION SCHEME végrehajtásával. Ha nincs megadva hely, és a tábla partíciózva van, a tábla ugyanabba a partíciós sémába kerül, mint a meglévő klaszterelt index.

A sémában az oszlop neve nem korlátozódik az index definíciójában szereplő oszlopokra. Az alaptáblázat bármely oszlopa megadható.

filegroup_name

A: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

Megad egy fájlcsoportot a kapott tábla helyének. Ha nincs megadva hely, és a tábla nincs partíciózva, akkor az eredmény ugyanabba a fájlcsoportba kerül, mint a klaszterelt index. A fájlcsoportnak már léteznie kell.

[alapértelmezett]

Megadja az alapértelmezett helyet a kapott táblahoz.

Megjegyzés:

Ebben a kontextusban default nem kulcsszó. Ez az alapértelmezett fájlcsoport azonosítója, és el kell tagoltnak lennie, mint a fájlban vagy MOVE TO "default"a fájlbanMOVE TO [default]. Ha "default" meg van jelölve, akkor QUOTED_IDENTIFIER az opciót be kell állítani ON a jelenlegi időszakra. Ez az alapértelmezett beállítás. További információ: SET QUOTED_IDENTIFIER.

FILESTREAM_ON { partition_scheme_name | filestream_filegroup_name | "alapértelmezett" }

A: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

Megadja a helyet a FILESTREAM tábla áthelyezéséhez, amely jelenleg a klaszterelt index levélszintjén van. Az adatokat egy halom formájában helyezik át az új helyre. Megadhatsz egy partíciós sémát vagy fájlcsoportot új helyként, de a partíciós séma vagy fájlcsoport már léteznie kell. FILESTREAM ON nem érvényes indexelt nézetekre vagy nem konklúziós indexekre. Ha nincs meghatározott partíciós séma, az adatok ugyanabban a partíciós sémában találhatók, mint a klaszteres indexhez definiálták.

partition_scheme_name

Megad egy partíciós sémát a FILESTREAM adatokhoz. A partíciós sémát már létre kell hozni, vagy a CREATE PARTITION SCHEME , vagy az ALTER PARTITION SCHEME végrehajtásával. Ha nincs megadva hely, és a tábla partíciózva van, a tábla ugyanabba a partíciós sémába kerül, mint a meglévő klaszterelt index.

Ha megadsz egy partíciós sémát , MOVE TOakkor ugyanazt a partíciós sémát kell használnod .FILESTREAM ON

filestream_filegroup_name

Megad egy FILESTREAM fájlcsoportot a FILESTREAM adatokhoz. Ha nincs megadva hely, és a tábla nincs partíciózva, az adat az alapértelmezett FILESTREAM fájlcsoportba kerül.

[alapértelmezett]

Megadja a FILESTREAM adatok alapértelmezett helyét.

Megjegyzés:

Ebben a kontextusban default nem kulcsszó. Ez az alapértelmezett fájlcsoport azonosítója, és el kell tagoltnak lennie, mint a fájlban vagy MOVE TO "default"a fájlbanMOVE TO [default]. Ha "default" meg van adva, a QUOTED_IDENTIFIER beállításnak az aktuális munkamenethez kell lennie ON . Ez az alapértelmezett beállítás. További információ: SET QUOTED_IDENTIFIER.

Megjegyzések

Amikor egy nem klaszterelt indexet elhagynak, az index definíciója eltávolítódik a metaadatból, és az indexadat oldalak (a B-fa) az adatbázis fájlokból kerülnek. Amikor egy klaszterelt indexet elhagyunk, az indexdefiníció eltávolítódik a metaadatból, és a klaszterelt index levélszintjén tárolt adatsorokat a kapott sorok a sorban lévő rendezetlen táblában, vagyis egy halomban tárolják. Az index által korábban elfoglalt hely visszanyerhető. Ezt a teret bármely adatbázis-objektumhoz használhatjuk.

Megjegyzés:

A dokumentáció általában a B-fa kifejezést használja az indexekre hivatkozva. A sorkataszterekben az adatbázismotor egy B+ fát implementál. Ez nem vonatkozik az oszlopcentrikus indexekre vagy a memóriaoptimalizált táblák indexére. További információ: SQL Server és Azure SQL index architektúrája és tervezési útmutatója.

Egy indexet nem lehet eltávolítani, ha a fájlcsoport, amelyben található, offline vagy csak olvasható.

Amikor egy indexelt nézet klaszterezett indexét megszüntetik, az összes nem klaszterizált index és automatikusan létrehozott statisztika ugyanabban a nézetben automatikusan eltűnik. A kézzel készített statisztikák nem kerülnek ki.

A szintaxist <table_or_view_name>.<index_name> a visszafelé kompatibilitás érdekében fenntartják. Az XML index vagy térbeli index nem lehet eltávolítani visszafelé kompatibilis szintaxis használatával.

Néha az indexeket elhagyják és újraalkotják, hogy újraszervezzék vagy újraépítsék az indexet, például új kitöltési tényező értéket alkalmaznak, vagy adatokat szerveznek újra egy tömeges betöltés után. Ehhez az ALTER INDEX használata hatékonyabb, különösen klaszterezett indexek esetén. ALTER INDEX REBUILD optimalizálásokkal rendelkezik, hogy megakadályozza a nem klaszterelt indexek újraépítésének többletköltségeit.

Halasztott kiosztás

Amikor 128 vagy annál nagyobb kiterjesztésű indexeket elhagynak, az Adatbázis Engine a tényleges oldal kioldását és a hozzájuk tartozó zárolásokat a tranzakció megkötése után halasztja. Az indexeket két külön fázisban hagyják el: logikai és fizikai. A logikai fázisban az index által használt meglévő allokációs egységeket megjelölik deallokációra és zárolják, amíg a tranzakció el nem köteleződik. A fizikai fázisban egy háttérfolyamat eltávolítja a kiosztásra jelölt oldalakat. Ez azt jelenti, hogy az általa DROP INDEX felengedett hely nem feltétlenül válik azonnal elérhetővé új elosztásokhoz.

Ha a gyorsított adatbázis-helyreállítás engedélyezve van, akkor a külön logikai és fizikai fázisokat használják a kiterjedések számától függetlenül.

Használd az opciókat a DROP INDEX-szel

A következő indexopciókat állíthatod be, amikor elhagyod a klaszterelt indexet: MAXDOP, ONLINE, és MOVE TO.

Használd MOVE TO a klaszterelt indexet elhagyni, és egyetlen tranzakcióban áthelyezni a kapott táblát egy másik fájlcsoportra vagy partíciós sémára.

Ha megadod ONLINE = ON, a lekérdezések és módosítások az alapul szolgáló adatokban, valamint a kapcsolódó nem klaszterezett indexekben nem blokkolódnak a DROP INDEX tranzakció által. Egyszerre csak egy klaszterelt index lehet online megjelentetni. Az opció teljes leírásáért lásd ONLINE.

Nem lehet online elhelyezni egy klaszterelt indexet, ha az index le van tiltva egy nézetben, vagy szöveg,ntext, image, varchar(max),nvarchar(max), varbinary(max) vagy xml oszlopok találhatók a levélszintű adatsorokban.

Az és ONLINE = ON opciók használata MOVE TO több ideiglenes lemezhelyet igényel.

Miután egy indexet elhagyunk, a kapott halom megjelenik a sys.indexes katalógus nézetben, NULL az oszlopban name lévő halom. A tábla név megtekintéséhez sys.indexes csatlakozz a sys.tables -en object_id. Példa lekérdezésért lásd a D példát.

Többprocesszoros számítógépeken, amelyek SQL Server 2005 Enterprise editiont vagy újabb verziókat futtatnak, DROP INDEX több processzort használhatnak a klaszterelt index eltörléséhez kapcsolódó szkennelési és rendezési műveletek végrehajtásához, akárcsak más lekérdezések. Manuálisan konfigurálhatod az utasítás futtatásához használt processzorok DROP INDEX számát az index opció megadásával MAXDOP . További információ: Párhuzamos indexelési műveletek konfigurálása.

Fürtözött index elvetésekor a megfelelő halompartíciók megőrzik az adattömörítési beállításukat, hacsak a particionálási sémát nem módosítják. Ha a partíciós sémát megváltoztatjuk, minden partíciót újraépítenek egy tömörítetlen állapotba (DATA_COMPRESSION = NONE). A klaszterezett index elhagyásához és a partíciós séma megváltoztatásához a következő két lépés szükséges:

  1. A fürtözött index elvetése.

  2. Módosítsd a táblát egy ALTER TABLE ... REBUILD ... olyan opcióval, amely megadja a tömörítési opciót.

Amikor egy klaszterelt indexet elhagyunk OFFLINE, csak a klaszterelt indexek felső szintjeit távolítják el; ezért a művelet gyors. Amikor egy klaszterelt indexet elhagynak ONLINE, az SQL Server kétszer építi újra a halmot, egyszer az 1. lépéshez, egyszer a 2. lépéshez. További információ az adattömörítésről: Adattömörítés.

XML-indexek

Az opciók nem határozhatók meg, amikor elhagyod az XML indexet. Ráadásul nem használhatod a <table_or_view_name>.<index_name> szintaxist. Amikor egy elsődleges XML indexet elhagynak, az összes kapcsolódó másodlagos XML index automatikusan elkerül. További információ: XML-indexek (SQL Server).

Térbeli indexek

A térbeli indexek csak táblázatokon támogatottak. Ha elhagysz egy térbeli indexet, nem lehet megadni semmilyen opciót vagy használni a <table_or_view_name>..<index_name> szintaxist. A helyes szintaxis a következő:

DROP INDEX <spatial_index_name> ON <spatial_table_name>;

További információért a térbeli indexekről lásd: Térbeli indexek áttekintése.

Permissions

A DROP INDEXvégrehajtásához legalább ALTER engedélyre van szükség a táblán vagy a nézeten. Ez az engedély alapértelmezés szerint a sysadmin fix szerver szerep és a db_ddladmin fix db_owner adatbázis szerepek számára kapható.

Példák

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A. Indexet ejtünk

A következő példa törli az IX_ProductVendor_BusinessEntityID indexet az ProductVendor AdventureWorks2025 adatbázis táblázatán.

DROP INDEX IX_ProductVendor_BusinessEntityID
    ON Purchasing.ProductVendor;
GO

B. Több indexet dobj el

A következő példa két indexet törl egyetlen tranzakcióból az AdventureWorks2025 adatbázisból.

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

C. Dobj be egy klaszterelt indexet online, és állítsd be a MAXDOP opciót

A következő példa törli a klaszterelt indexet, amelynek opciója és ONLINEON beállítása .MAXDOP8 Mivel az MOVE TO opció nem volt megadva, az eredmény tábla ugyanabban a fájlcsoportban van tárolva, mint az index.

Érvényes: SQL Server 2008 (10.0.x) és későbbi verziók, SQL Database.

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

D. Dobj be egy klaszterelt indexet online, és helyezd át a táblát egy új fájlcsoportba

Az alábbi példa törli a fürtözött indexet online, és az eredményként kapott táblát (halom) a NewGroup záradék használatával áthelyezi a fájlcsoportba MOVE TO. A rendszer lekérdezi a sys.indexes, sys.tablesés sys.filegroups katalógusnézeteket, hogy ellenőrizze az áthelyezés előtti és utáni index- és táblaelhelyezést a fájlcsoportokban. Az SQL Server 2016-tól (13.x) kezdve használhatod a DROP INDEX IF EXISTS szintaxist.

A: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

--Create a clustered index on the PRIMARY filegroup if the index does not exist.
CREATE UNIQUE CLUSTERED INDEX
    AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate
        ON Production.BillOfMaterials (ProductAssemblyID, ComponentID,
        StartDate)
    ON [PRIMARY];

-- 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 AdventureWorks2022
        ADD FILEGROUP NewGroup;
    ALTER DATABASE AdventureWorks2022
        ADD FILE (NAME = File1,
            FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\File1.ndf')
        TO FILEGROUP NewGroup;
    END
GO
--Verify new filegroup
SELECT * from sys.filegroups;

-- 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);

-- 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');

E. Dobj el egy ELSŐDLEGES KULCS korlátozást online

Az indexek, amelyek létrehozás PRIMARY KEY vagy UNIQUE korlátozások eredményeként jöttek létre, nem lehet eltávolítani .DROP INDEX A nyilatkozat alapján ejtik ALTER TABLE DROP CONSTRAINT őket. További információ: ALTER TABLE.

A következő példa törli a klaszterelt indexet egy PRIMARY KEY korlátozással a korlátozás elhagyásával. A ProductCostHistory táblázatnak nincsenek FOREIGN KEY korlátai. Ha így lenne, először ezeket a korlátokat el kellene távolítani.

-- 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);

F. Dobj el XML indexet

A következő példa XML indexet dob az ProductModel AdventureWorks2025 adatbázis táblázatára.

DROP INDEX PXML_ProductModel_CatalogDescription
    ON Production.ProductModel;

G. Helyezzen el egy klaszterelt indexet egy FILESTREAM táblára

A következő példa törli a klaszterelt indexet online, és a kapott táblázatot (halom) és a FILESTREAM MyPartitionScheme adatokat a partíciós sémához helyezi mind a MOVE TO klauzula, mind a FILESTREAM ON klauzula használatával.

A: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

DROP INDEX PK_MyClusteredIndex
    ON dbo.MyTable
    WITH (MOVE TO MyPartitionScheme,
          FILESTREAM_ON MyPartitionScheme);