2017-01-04 3 views
1

Als schneller Hintergrund wurde ich beauftragt, Tabellen und Indizes von der PRIMARY-Dateigruppe auf andere Dateigruppen zu verschieben. Um eine Vorstellung zu bekommen, wo alles schon lebt ich die folgende Abfrage bin mit:Warum sind SQL Server Table-Valued Functions in sys.indexes aufgeführt?

SELECT s.name AS schemaName, o.[name] AS ObjectName, 
i.[name] indexName, 
CASE o.[type] 
    WHEN 'U' THEN 'User Table' 
    WHEN 'S' THEN 'System Table' 
    WHEN 'TT' THEN 'Table Type' 
    WHEN 'IT' THEN 'Internal Table' 
    WHEN 'TF' THEN 'Table Valued Function' 
    ELSE o.[type] 
    END 
AS objectType, 
f.[name] AS [FileGroup] 
FROM sys.indexes i 
INNER JOIN sys.filegroups f 
ON i.data_space_id = f.data_space_id 
INNER JOIN sys.all_objects o 
ON i.[object_id] = o.[object_id] 
INNER JOIN sys.schemas s 
ON s.schema_id = o.schema_id 
WHERE i.data_space_id = f.data_space_id 
ORDER BY s.name, o.name, i.name 
GO 

des Lauf Ich sehe, dass benutzerdefinierte Tabellenwertfunktionen zeigen sich auch hier und sind mit einer Typenbezeichnung aufgeführt von ' HAUFEN'. Warum das? Werden Daten tatsächlich auf die gleiche Weise wie Tabellen und Indizes gespeichert?

Antwort

0

Jeder Tisch hat eine physische Organisation. Wenn kein benutzerdefinierter Cluster Index vorhanden ist, wird die Tabelle als Heap gespeichert, andernfalls wird sie gemäß dem gruppierten Index gespeichert.

Dies gilt für Tabellen, benutzerdefinierte Tabellentypen und Funktionen, die Tabellentypen zurückgeben. Die Indexzeilen, die Sie für benutzerdefinierte Tabellenfunktionen sehen, geben die Organisation des anonymen-Tabellentyps wieder, der in der Präambel der Funktion definiert ist.

Ich habe zufällig viele benutzerdefinierte Tabellentypen, aber nur zwei Tabellenwerte benutzerdefinierte Funktionen ... und sah den gleichen Heap-Index-Eintrag für diese Tabelle Typen auch. Die Indizes für diese Entitäten scheinen alle unbenannt zu sein - was angemessen erscheint.

Mit einer benutzerdefinierten Tabellenwertfunktion sammeln Sie normalerweise Daten in der deklarierten Tabelle und geben sie am Ende zurück ... damit SQL wissen muss, wie die Daten während der Ausführung gespeichert werden. Benutzerdefinierte Inline Tabellenwertfunktionen fehlen Indizes wie erwartet, da solche Entitäten effektiv parametrisierte Ansichten sind, die die Indizes der zugrunde liegenden Objekte verwenden.

bearbeiten:

Sie begrenzten Indizes zu den anonymen Tabellen in der Deklaration der benutzerdefinierten, Tabellenwertfunktionen definierten hinzufügen kann - sowie benutzerdefinierte Tabellentypen.

+0

Kleine Korrektur: Eine Tabelle ist eine Heap-Tabelle, wenn kein Clustered-Index vorhanden ist. Eine Heap-Tabelle kann eine beliebige Anzahl nicht gruppierter Indizes enthalten. –

+0

Ja danke, @JeroenMostert - wird entsprechend editieren – Clay

Verwandte Themen