मुझे पता है कि जब एक इंडेक्स या टेबल स्कैन का उपयोग करने की बात आती है, तो SQL सर्वर आंकड़ों का उपयोग करके यह देखता है कि कौन सा बेहतर है।
मेरे पास 20 मिलियन पंक्तियों वाली एक तालिका है। मेरे पास (SnapshotKey, उपाय) और इस क्वेरी पर एक सूचकांक है:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
क्वेरी 500k पंक्तियों को लौटाती है। इसलिए क्वेरी तालिका की केवल 2.5% पंक्तियों का चयन करती है।
सवाल यह है कि SQL सर्वर के पास मेरे पास मौजूद गैर-अनुक्रमित सूचकांक का उपयोग क्यों नहीं करता है, और इसके बजाय एक टेबल स्कैन का उपयोग करता है?
आंकड़े अपडेट किए जाते हैं।
यह बताने के लिए अच्छा है कि क्वेरी का प्रदर्शन हालांकि अच्छा है।
टेबल स्कैन
मजबूर सूचकांक
तालिका / सूचकांक संरचना
CREATE TABLE [t1](
[SnapshotKey] [int] NOT NULL,
[SnapshotDt] [date] NOT NULL,
[Measure] [nvarchar](30) NOT NULL,
[MeasureBand] [nvarchar](30) NOT NULL,
-- and many more fields
) ON [PRIMARY]
टेबल पर कोई पीके नहीं है, क्योंकि यह एक डेटा वेयरहाउस है।
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)