ऐसी स्थितियां हैं जहां अतिरेक धारण नहीं करता है। उदाहरण के लिए, ColumnC
. कहें एक विशाल क्षेत्र था, लेकिन आपको कभी-कभी इसे जल्दी से पुनः प्राप्त करना होगा। आपका index 1
इसके लिए एक महत्वपूर्ण खोज की आवश्यकता नहीं होगी:
select ColumnC from YourTable where ColumnnA = 12
दूसरी ओर index 2
बहुत छोटा है, इसलिए इसे उन प्रश्नों के लिए स्मृति में पढ़ा जा सकता है जिनके लिए अनुक्रमणिका स्कैन की आवश्यकता होती है:
select * from YourTable where ColumnnA like '%hello%'
तो वे वास्तव में बेमानी नहीं हैं।
यदि आप मेरे उपरोक्त तर्क से आश्वस्त नहीं हैं, तो आप "अनावश्यक" अनुक्रमणिका पा सकते हैं जैसे:
;with ind as (
select a.object_id
, a.index_id
, cast(col_list.list as varchar(max)) as list
from (
select distinct object_id
, index_id
from sys.index_columns
) a
cross apply
(
select cast(column_id as varchar(16)) + ',' as [text()]
from sys.index_columns b
where a.object_id = b.object_id
and a.index_id = b.index_id
for xml path(''), type
) col_list (list)
)
select object_name(a.object_id) as TableName
, asi.name as FatherIndex
, bsi.name as RedundantIndex
from ind a
join sys.sysindexes asi
on asi.id = a.object_id
and asi.indid = a.index_id
join ind b
on a.object_id = b.object_id
and a.object_id = b.object_id
and len(a.list) > len(b.list)
and left(a.list, LEN(b.list)) = b.list
join sys.sysindexes bsi
on bsi.id = b.object_id
and bsi.indid = b.index_id
प्रदर्शन "अप्रत्याशित रूप से" घटने की स्थिति में अपने उपयोगकर्ताओं के लिए केक लाएं :-)