sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man ställer in och indexerar på två kolumner av T-SQL-deklarerad tabellvariabel?

Du kan skapa ett icke-klustrat index enligt följande.

DECLARE @t TABLE (
  PK   INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
  Col1 INT,
  Col2 INT,
  UNIQUE (Col1, Col2, PK)) 

Om avsikten är att Col1, Col2 är unika själva, ta sedan bort PK från kolumnlistan.

Även om det verkar på nominellt värde som om detta har lagt till en extra kolumn i (PK ) indexstrukturen kommer att vara densamma som att skapa ett icke unikt index på bara Col1, Col2 på en #temp bord.

CREATE TABLE #T  (
  PK   INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
  Col1 INT,
  Col2 INT) 

/*PK added in to end of key anyway*/  
CREATE NONCLUSTERED INDEX ix ON #T(Col1, Col2)

för ett icke unikt icke-klustrat index lägger SQL Server alltid till CI-nyckeln till NCI-nyckeln implicit ändå. Detta visar bara det explicit.

Se Kalen Delaney Mer om Icke-klustrade indexnycklar



  1. SYSUTCDATETIME() vs GETUTCDATE() i SQL Server:Vad är skillnaden?

  2. mysql SUMMA av VARCHAR-fält utan att använda CAST

  3. Databasbyte och failover för Drupal-webbplatser som använder MySQL eller PostgreSQL

  4. Återställde borttagna rader i postgresql