sys.sp_indexoption (Transact-SQL)

Van toepassing op:SQL Server

Stelt vergrendelingsopties in voor door de gebruiker gedefinieerde geclusterde en niet-geclusterde indexen of tabellen zonder geclusterde index.

De SQL Server Database Engine maakt automatisch keuzes tussen pagina-, rij- of tabelvergrendeling. Je hoeft deze opties niet handmatig in te stellen. sp_indexoption wordt aangeboden voor deskundige gebruikers die met zekerheid weten dat een bepaald type slot altijd geschikt is.

Important

Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie. Gebruik in plaats daarvan ALTER INDEX.

Transact-SQL syntaxis-conventies

Syntax

sys.sp_indexoption
    [ @IndexNamePattern = ] N'IndexNamePattern'
    , [ @OptionName = ] 'OptionName'
    , [ @OptionValue = ] 'OptionValue'
[ ; ]

Arguments

[ @IndexNamePattern = ] N'IndexNaamPatroon'

De gekwalificeerde of niet-gekwalificeerde naam van een door de gebruiker gedefinieerde tabel of index. @IndexNamePattern is nvarchar(1035), zonder standaard. Aanhalingstekens zijn alleen vereist als een gekwalificeerde index of tabelnaam is opgegeven. Als een volledig gekwalificeerde tabelnaam, inclusief een databasenaam, wordt opgegeven, moet de databasenaam de naam zijn van de huidige database. Als een tabelnaam zonder index wordt opgegeven, wordt de opgegeven optiewaarde ingesteld voor alle indexen in die tabel en voor de tabel zelf als er geen geclusterde index bestaat.

[ @OptionName = ] 'OptionName'

Een indexoptienaam. @OptionName is varchar(35) en kan een van de volgende waarden zijn.

Value Description
AllowRowLocks Wanneer TRUE, zijn rijvergrendelingen toegestaan bij het openen van de index. De database-engine bepaalt wanneer rijvergrendelingen worden gebruikt. Wanneer FALSE, worden rijvergrendelingen niet gebruikt. De standaardwaarde is TRUE.
AllowPageLocks Wanneer TRUE, zijn paginavergrendelingen toegestaan bij het openen van de index. De database-engine bepaalt wanneer paginavergrendelingen worden gebruikt. Wanneer FALSE, worden paginavergrendelingen niet gebruikt. De standaardwaarde is TRUE.
DisAllowRowLocks Wanneer TRUE, worden rijvergrendelingen niet gebruikt. Wanneer FALSE, zijn rijvergrendelingen toegestaan bij het openen van de index. De database-engine bepaalt wanneer rijvergrendelingen worden gebruikt.
DisAllowPageLocks Wanneer TRUE, worden paginavergrendelingen niet gebruikt. Wanneer FALSE, zijn paginavergrendelingen toegestaan bij het openen van de index. De database-engine bepaalt wanneer paginavergrendelingen worden gebruikt.

[ @OptionValue = ] 'OptionValue'

Specificeert of de @OptionName-instelling is ingeschakeld (TRUE, ON, , yesof 1) of uitgeschakeld (FALSE, OFF, no, , of 0). @OptionValue is varchar(12), zonder standaard.

Codewaarden retourneren

0 (geslaagd) of > 0 (mislukt).

Opmerkingen

XML-indexen worden niet ondersteund. Als een XML-index wordt gespecificeerd, of een tabelnaam wordt opgegeven zonder indexnaam en de tabel bevat een XML-index, faalt de instructie. Om deze opties in te stellen, gebruik ALTER INDEX dan in plaats daarvan.

Om de huidige rij- en paginavergrendelingseigenschappen weer te geven, gebruikt u INDEXPROPERTY of de sys.indexes catalogusweergave.

  • Vergrendelingen op rijniveau, paginaniveau en tabelniveau zijn toegestaan bij het openen van de index wanneer AllowRowLocks = TRUE of DisAllowRowLocks = FALSE, en AllowPageLocks = TRUE of DisAllowPageLocks = FALSE. De database-engine kiest de juiste vergrendeling en kan de vergrendeling van een rij- of paginavergrendeling escaleren naar een tabelvergrendeling.

Alleen een tabelniveau-lock is toegestaan bij het openen van de index wanneer AllowRowLocks = FALSE of en DisAllowRowLocks = TRUEAllowPageLocks = FALSE of DisAllowPageLocks = TRUE.

Als een tabelnaam zonder index wordt gespecificeerd, worden de instellingen toegepast op alle indexen in die tabel. Wanneer de onderliggende tabel geen geclusterde index heeft (dat wil zeggen, het is een heap), worden de instellingen als volgt toegepast:

  • Wanneer AllowRowLocks of op of FALSEworden gezetTRUE, wordt de instelling toegepast op de heap en eventuele bijbehorende niet-geclusterde DisAllowRowLocks indexen.

  • Wanneer AllowPageLocks de optie is ingesteld op TRUE of DisAllowPageLocks op is gezet FALSE, wordt de instelling toegepast op de heap en eventuele bijbehorende niet-geclusterde indexen.

  • Wanneer AllowPageLocks de optie is ingesteld FALSE of DisAllowPageLocks op is gezet TRUE, wordt de instelling volledig toegepast op de niet-geclusterde indexen. Dat wil zeggen, alle paginavergrendelingen zijn niet toegestaan op de niet-geclusterde indexen. Op de heap zijn alleen de gedeelde (S), update (U) en exclusieve (X) vergrendelingen voor de pagina niet toegestaan. De Database Engine kan nog steeds een intentiepagina-lock (IS, IU of IX) verkrijgen voor interne doeleinden.

Permissions

Vereist ALTER autorisatie op de tabel.

Examples

A. Stel een optie in op een specifieke index

Het volgende voorbeeld staat paginavergrendelingen op de IX_Customer_TerritoryID index in de Customer tabel niet toe.

USE AdventureWorks2022;
GO

EXECUTE sp_indexoption N'Sales.Customer.IX_Customer_TerritoryID', N'disallowpagelocks', TRUE;

B. Stel een optie in op alle indexen in een tabel

Het volgende voorbeeld staat rijvergrendelingen niet toe op alle indexen die aan de Product tabel zijn gekoppeld. De sys.indexes catalogusweergave wordt voor en na het uitvoeren van de sp_indexoption procedure geraadpleegd om de resultaten van de instructie te tonen.

USE AdventureWorks2022;
GO

--Display the current row and page lock options for all indexes on the table.
SELECT name,
       type_desc,
       allow_row_locks,
       allow_page_locks
FROM sys.indexes
WHERE object_id = OBJECT_ID(N'Production.Product');
GO

-- Set the disallowrowlocks option on the Product table.
EXECUTE sp_indexoption N'Production.Product', N'disallowrowlocks', TRUE;
GO

--Verify the row and page lock options for all indexes on the table.
SELECT name,
       type_desc,
       allow_row_locks,
       allow_page_locks
FROM sys.indexes
WHERE object_id = OBJECT_ID(N'Production.Product');
GO

C. Stel een optie in op een tabel zonder geclusterde index

Het volgende voorbeeld staat paginavergrendelingen niet toe op een tabel zonder geclusterde index (een heap). De sys.indexes catalogusweergave wordt voor en na de uitvoering van de sp_indexoption procedure opgezocht om de resultaten van de instructie te tonen.

USE AdventureWorks2022;
GO

--Display the current row and page lock options of the table.
SELECT OBJECT_NAME(object_id) AS [Table],
       type_desc,
       allow_row_locks,
       allow_page_locks
FROM sys.indexes
WHERE OBJECT_NAME(object_id) = N'DatabaseLog';
GO

-- Set the disallowpagelocks option on the table.
EXECUTE sp_indexoption DatabaseLog, N'disallowpagelocks', TRUE;
GO

--Verify the row and page lock settings of the table.
SELECT OBJECT_NAME(object_id) AS [Table],
       allow_row_locks,
       allow_page_locks
FROM sys.indexes
WHERE OBJECT_NAME(object_id) = N'DatabaseLog';
GO