2017-09-28 1 views
0

Ich habe eine Tabelle mit dem folgenden SchemaIndex Erstellen auf Textspalten SQL Server 2012

Users(
Id   int PK, 
FirstName varchar(255), 
SurName varchar(255) , 
UserName varchar(255), 
City  varchar(255) , 
Country varchar(255)) 

Meine Anwendung auf FirstName, SurName und auf beiden FirstName+SurName beinhaltet die Suche wie soll ich einen Index so erstellen, dass sie die meisten gibt optimierte Timing-Leistung

Ist der unter Index angegeben wird der Zweck

CREATE NONCLUSTERED INDEX 
USR_FirstNameSurName_IDX 
ON dbo.Users(FirstName,SurName) 

PS lösen: Aufgrund Katalog Wartungsaufwand ich nicht Volltextsuche verwenden können.

+0

erstellen kann ich eine berechnete Spalte erstellen, die verkettet die beiden Felder vorschlagen würde, und dann auf die Erstellung eines Index . –

+0

warum schreiben Sie nicht eine Suche nach dieser Tabelle in SSMS und fügen Sie den tatsächlichen Ausführungsplan hinzu. SSMS sollte Sie dann informieren, wenn ein Index fehlt und wie er sein sollte – GuidoG

Antwort

0

Erstellen einer Index on Tabelle wird die Leistung der Datenwiederherstellung absolut und innerhalb des optimalen Timings erhöhen. Erstellen eines Indexes bedeutet, dass es die Column Daten in dieser Tabelle neu organisieren wird. Ihr Ansatz ist gut und keine andere Möglichkeit, die Daten basierend auf den FirstName und SurName im Optimal außer Indexing abzurufen. Noch eine Sache Holen Sie sich die benötigte Columns nur statt * in der Select Liste.

Ich erwarte Ihre Abfrage wie folgt.

SELECT Id, FirstName, SurName 
FROM Users 
WHERE (FirstName LIKE 'D%' OR SurName LIKE 'D%') 
0

eine berechnete Spalte

CREATE table Users(
Id   int primary key identity 
,FirstName varchar(255) 
,SurName varchar(255) 
,UserName varchar(255) 
,City  varchar(255) 
,Country varchar(255) 
,FullName AS LTRIM(RTRIM(FirstName)) + ' ' + RTRIM(LTRIM(SurName)) 
) 

Insert Users(FirstName, SurName) Values('FirstName' , 'SurName') 
Insert Users(FirstName, SurName) Values('Siddharth' , 'Bharadwaj') 
Insert Users(FirstName, SurName) Values('Shyam' , 'Vemula') 


SELECT FirstName, SurName, FullName FROM Users where FullName like ('%th Bh%') 
FirstName           SurName           FullName 
-------------------------------------------------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------- 
Siddharth           Bharadwaj           Siddharth Bharadwaj 

(1 row(s) affected) 

SELECT FirstName, SurName, FullName FROM Users where FullName like ('%Test%') 
FirstName           SurName           FullName 
-------------------------------------------------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------- 

(0 row(s) affected) 

notwendig Verwendung Wenn Sie einen Index

create index akUsersFullName on Users (FullName)