जब तक मैं कॉलम के उद्देश्य को गलत नहीं समझ रहा हूं, निम्न कोड इंगित करता है कि क्लस्टर इंडेक्स की संरचना में बदलाव stats_column_id
से कॉलम की क्रमिक स्थिति ( ) sys.stats_columns DMV में नहीं बदलती है । (AdventureWorks2014, AdventureWorks2008R2 में परीक्षण किया गया)
select i.name, c.name, ic.column_id, ic.index_column_id
from sys.indexes i
join sys.index_columns ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
join sys.columns c
on i.object_id = c.object_id
and ic.column_id = c.column_id
where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by ic.key_ordinal;
select sh.name,s.name, c.name, c.column_id, sc.column_id, sc.stats_column_id
from sys.stats s
join sys.stats_columns sc
on s.object_id = sc.object_id
and s.stats_id = sc.stats_id
join sys.columns c
on s.object_id = c.object_id
and sc.column_id = c.column_id
join sys.tables t
on s.object_id = t.object_id
join sys.schemas sh
on t.schema_id = sh.schema_id
where s.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by sc.stats_column_id;
dbcc show_statistics('[Person].[BusinessEntityAddress]','PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID') with density_vector;
ALTER TABLE [Person].[BusinessEntityAddress] DROP CONSTRAINT [PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID]
GO
ALTER TABLE [Person].[BusinessEntityAddress] ADD CONSTRAINT [PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID] PRIMARY KEY CLUSTERED
(
AddressID ASC,
[BusinessEntityID] ASC,
[AddressTypeID] ASC
)
GO
select i.name, c.name, ic.column_id, ic.index_column_id
from sys.indexes i
join sys.index_columns ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
join sys.columns c
on i.object_id = c.object_id
and ic.column_id = c.column_id
where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by ic.key_ordinal;
select sh.name,s.name, c.name, c.column_id, sc.column_id, sc.stats_column_id
from sys.stats s
join sys.stats_columns sc
on s.object_id = sc.object_id
and s.stats_id = sc.stats_id
join sys.columns c
on s.object_id = c.object_id
and sc.column_id = c.column_id
join sys.tables t
on s.object_id = t.object_id
join sys.schemas sh
on t.schema_id = sh.schema_id
where s.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by sc.stats_column_id;
dbcc show_statistics('[Person].[BusinessEntityAddress]','PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID') with density_vector;
हालाँकि, घनत्व वैक्टर सूचकांक / सांख्यिकी ऑब्जेक्ट के प्रमुख कॉलम में बदलाव का संकेत देते हैं। क्या यह मेरी ओर से एक बुनियादी गलतफहमी है? यदि ऐसा है, तो मैं DMV का उपयोग करके किसी ऑब्जेक्ट ऑब्जेक्ट के प्रमुख कॉलम को कैसे ढूँढूंगा?
परीक्षण SQL सर्वर संस्करण: 2008R2, 2014
key_ordinal
सूचकांक कॉलम का क्रम है (बस यह पता चला है)। हालाँकि, sys.stats_columns पर दस्तावेज़ीकरण यह दर्शाता है कि आँकड़े_column_id क्रमिक स्थिति है, लेकिन मैं इसे पूरी तरह से गलत पढ़ सकता हूं।
INDEX_COL()
हालांकि मैं किसी को याद नहीं करता हूं कि उन सहायक कार्यों का सबसे अच्छा विचार नहीं हो सकता है