sql >> Database >  >> RDS >> Sqlserver

Hoe twee kolommen met T-SQL gedeclareerde tabelvariabele in te stellen en te indexeren?

Je kunt maak als volgt een niet-geclusterde index.

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

Als de bedoeling is dat Col1, Col2 zijn zelf uniek verwijder dan PK uit de kolomlijst.

Hoewel het op het eerste gezicht lijkt alsof dit een extra kolom heeft toegevoegd in (PK ) de indexstructuur zal hetzelfde zijn als het maken van een niet-unieke index op slechts Col1, Col2 op een #temp tafel.

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)

voor een niet-unieke niet-geclusterde index voegt SQL Server sowieso altijd impliciet de CI-sleutel toe aan de NCI-sleutel. Dit laat het gewoon expliciet zien.

Zie Kalen Delaney Meer over Niet-geclusterde indexsleutels



  1. Groeperen op datum, rij terug, zelfs als er geen records zijn gevonden

  2. PHP-code bij het bekijken van een pdf-bestand uit een mysql-database

  3. MySQL C++-connector:verkrijg de insert_id

  4. PostgreSQL-type tijdstempel wijzigen zonder tijdzone -> met tijdzone