2016-11-23 3 views
1

Wenn ich meinen Tisch extrahiere, bekomme ich das. Die Tabelle hat eine ID Spalte, die eine Identitätsspalte (autoinc) ist.Beschleunigung der SQL-Abfrage mit Index für die Identitätsspalte oder die gesuchte Spalte?

Dann gibt es noch die lesbare Kundennummer, die theoretisch eindeutig ist, aber die Tabelle erzwingt nichts bisher.

Meine Kunden suchen nach der Kundennummer und nicht nach der ID.

Meine Frage jetzt: Sollte ich noch einen Index (wenn ja Clustered/Nonclustered?) Zur Spalte CUSTERMERNUMBER hinzufügen, um die Geschwindigkeit der Suche zu erhöhen?

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE Customer 
(
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [CUSTOMERNUMBER] [nvarchar](50) NULL, 
    -- other columns 

    CONSTRAINT [PK_Customer] 
     PRIMARY KEY CLUSTERED ([ID] ASC) 
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
         IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
         ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 
+1

Ja ein Index würde helfen. Sie können den Cluster jedoch nicht gruppieren, da Ihr Primärschlüssel bereits der Clustered-Index ist. Brauchst du wirklich nvarchar hier zu verwenden? Planen Sie Zeichen außerhalb des ASCII-Zeichensatzes als Teil Ihrer Kundennummer? –

+0

Die Kundennummer ist nur "345345453543534" keine alphabetischen Zeichen. – Elisabeth

Antwort

2

Wenn das ID Feld in anderen Tabellen als Fremdschlüssel referenziert wird dann verlassen, dass als gruppierten Index für sicher, und erstellen Sie einen nicht gruppierten Index auf CUSTOMERNUMBER.

Betrachten nicht nur einen Index für CUSTOMERNUMBER zu schaffen, sondern weiter zu gehen und ein Unique Constraint darauf (die mit einem Index kommt) zu schaffen. Dadurch wird verhindert, dass die Geschäftsregel, die eine eindeutige CUSTOMERNUMBER erfordert, verletzt wird, und der Datenbank werden zusätzliche Informationen zur Verfügung gestellt, die sie für effizientere Vorgänge verwenden kann.

Wie immer Test zuerst:

Alter Table Customer Add Constraint uCUSTOMERNUMBER Unique (CUSTOMERNUMBER); 

(Ein Nachteil einer einzigartigen Einschränkung ist, dass der eindeutige Index schafft es nicht kann include zusätzliche Spalten Wenn eine Anforderung enthält, die damals eine einzigartige, nicht. Clustered Index ist eine Option.)

+0

Nun, die Durchsetzung der Kundennummer als einzigartig ist eine gute Sache. Ich brauche keine zusätzlichen Spalten, um zusammen mit der Kundennummer eindeutig zu sein. – Elisabeth

0

Erstellen eines eindeutigen/Non Clustered Index auf Kundennummer ist eine gute Idee. Aber wir sollten vorsichtig sein, nicht zu viele Indizes erstellen, vor allem, wenn die Tabelle riesig ist mit vielen DML s geschieht .

Verwandte Themen