हमारे डेटाबेस में हम 200.000 पंक्तियोंमेरी अनुक्रमणिका का उपयोग कर SQL सर्वर क्यों नहीं है?
CREATE TABLE dbo.UserTask (
UserTask_ID int NOT NULL IDENTITY (1, 1),
UserTask_SequenceNumber int NOT NULL DEFAULT 0,
UserTask_IdEntitat uniqueidentifier NOT NULL,
UserTask_Subject varchar(100) NOT NULL,
UserTask_Description varchar(500) NOT NULL,
.....
.....
CONSTRAINT [PK_UserTask] PRIMARY KEY CLUSTERED
(
[UserTask_ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]
के साथ इस तालिका मैं
CREATE NONCLUSTERED INDEX IX_UserTask_IDEntitat ON dbo.UserTask
(
UserTask_IDEntitat
)
निम्न क्वेरी निष्पादित साथ UserTask_IdEntitat
स्तंभ पर एक सूचकांक बनाया है, कार्य योजना लागू करके हमें UserTask_IDEntitat
पर कि सूचकांक प्रयोग किया जाता है पता चलता क्वेरी करने के लिए:
SELECT UserTask_ID
FROM UserTask
WHERE UserTask_IdEntitat = @IdEntitat
ORDER BY UserTask_LastSendSystemDateTime desc
लेकिन अगर हममें एक और कॉलम जोड़ते हैंसूची है, तो सूचकांक
SELECT UserTask_ID, UserTask_SequenceNumber, UserTask_IDEntitat, ....., UserTask_Subject
FROM UserTask
WHERE UserTask_IdEntitat = @IdEntitat
ORDER BY UserTask_LastSendSystemDateTime desc
नहीं किया जाता है क्यों जोड़ने एक स्तंभ प्राथमिक कुंजी से अलग बनाता है कि एसक्यूएल सर्वर कार्य योजना लागू करके UserTask_IDEntitat
स्तंभ पर सूचकांक का उपयोग नहीं करता?
इस लिंक के बाद http://bytes.com/topic/sql-server/answers/144592-sqlsever-not-using-index ऐसा लगता है कि फ़िल्टर किए गए मान को कॉलम पर दोहराया गया है, यह बना सकता है कि इंडेक्स का उपयोग नहीं किया जाता है, लेकिन मैंने @IdEntitat मान के साथ क्वेरी करने का प्रयास किया है जो दोहराया जाता है 60,000 बार और अन्य जो केवल 175 बार दोहराया जाता है और परिणाम समान होते हैं, IDEntitat
कॉलम पर सूचकांक अनदेखा किया जाता है।
यह मुझे पागल ले रहा है !!!
आपकी मदद के लिए धन्यवाद।
आप एक उपयुक्त संस्करण पर हैं, और यह एक आम प्रश्न है, तो आप 'शामिल करने पर विचार करना चाह सकते हैं सूचकांक में '_SequenceNumber'' 'ing। –
... और 'LastSendSystemDateTime' भी, मुझे लगता है। ('द्वारा आदेश 'करने में मदद करने के लिए)। –