2016-06-17 6 views
3

In MSSQL habe ich Index für eine partitionierte Tabelle, für die ich die Bedeutung der Eigenschaft key_ordinal nicht verstehe, wenn es gleich Null ist.Was ist key_ordinal = 0 für Indexspalten

Um den Index zu erstellen, basiert das Partitionsschema auf CUT_OFF.

create table dbo.TESTTB (CUT_OFF datetime, number int) on partscheme(CUT_OFF); 
create index TESTIX on dbo.TESTTB (number) on partscheme(CUT_OFF); 

Die Abfrage zeigt die Werte von key_ordinal:

select c.name as column_name, b.key_ordinal 
from sys.indexes a 
inner join sys.index_columns b 
    on a.object_id = b.object_id and a.index_id = b.index_id 
inner join sys.all_columns c on b.object_id = c.object_id 
    and b.column_id = c.column_id 
where a.name = 'TESTIX' 

Die Ergebnisse sind:

column_name key_ordinal 
CUT_OFF  0 
number  1 

Die Säule cut_off:

  • Ist in sys.index_columns mit key_ordinal = 0
  • Fehlen in Create Index Anweisung
  • Fehlen in Index von sp_help 'TESTTB'

MSDN says:

0 = keine Schlüsselspalteninformationen zeigt, oder ist ein XML-Index, ein Columnstore-Index oder ein räumlicher Index.

Was bedeutet das? Was ist key_ordinal = 0?

Dank

+1

Sie Partitionieren einer Heap-Tabelle, da Sie keinen Clustered-Index erstellt haben (entweder explizit oder implizit als die Primärschlüssel). Wollen Sie das wirklich tun? Es ist ein ungewöhnliches Szenario, um es gelinde auszudrücken, und wahrscheinlich die Erklärung für das seltsame 'key_ordinal'. –

+1

Ich denke, es ist ähnlich der Situation unter 'is_included_column':" Spalten implizit hinzugefügt, weil sie eine Partitionierungsspalte sind, werden als 0 zurückgegeben. " –

+0

"0 = Keine Schlüsselspalte", - sieht so aus. –

Antwort

1

Sieht aus wie es auf den Index implizit auf der Blattebene (wie ENTHALTEN Spalte) hinzugefügt wird. Daher ist es keine Schlüsselspalte. Unten sind Screenshots der Ausgabe von DBCC PAGE für diesen Index.

Root-Ebene:

enter image description here

Blatt Level:

enter image description here

+0

Können Sie erklären, was eine INCLUDE-Spalte ist? Danke – Radioleao

+1

Sicher. Ich meine dies - https://msdn.microsoft.com/en-us/library/ms190806.aspx Spalten, die mit dem Schlüsselwort INCLUDE zum Nonclustered-Index hinzugefügt werden. Sie werden der Blattebene hinzugefügt und verhindern die Schlüssel- oder RID-Suche, wenn alle von der Abfrage benötigten Daten in den included- oder key-Spalten des Nonclustered-Indexes gefunden werden können. –