2009-09-02 12 views
6

में इंडेक्स के बिना टेबल की सूची मैं अपने SQL 2008 डेटाबेस में अनुक्रमणिका के बिना टेबल कैसे सूचीबद्ध करूं?एसक्यूएल 2008

संपादित करें
मुझे स्कीमा नाम और तालिका का नाम चाहिए।

उत्तर

7

इसमें आपकी क्या तलाश होनी चाहिए। यानी टेबल जो ढेर हैं (कोई क्लस्टर सूचकांक नहीं) और आपके पास कोई गैर-क्लस्टर इंडेक्स नहीं है। यह नए sys का उपयोग करता है। 2005/2008 में उपयोग की जाने वाली टेबल ऑब्जेक्ट्स।

अलावा, आप शायद टेबल करना है कि एक संकुल अनुक्रमणिका देखने के लिए चाहते हैं, लेकिन कोई nonclustered अनुक्रमणिका (इस बयान जो मैं छोड़ बाहर टिप्पणी की है के 2 हिस्सा है।

SELECT 
    schemaname = OBJECT_SCHEMA_NAME(o.object_id) 
    ,tablename = o.NAME 
FROM sys.objects o 
INNER JOIN sys.indexes i ON i.OBJECT_ID = o.OBJECT_ID 
-- tables that are heaps without any nonclustered indexes 
WHERE (
     o.type = 'U' 
     AND o.OBJECT_ID NOT IN (
      SELECT OBJECT_ID 
      FROM sys.indexes 
      WHERE index_id > 0 
      ) 
     ) 
     -- OR 
     -- table that have a clustered index without any nonclustered indexes 
     --(o.type='U' 
     --  AND o.OBJECT_ID NOT IN (
     -- SELECT OBJECT_ID 
     --  FROM sys.indexes 
     --  WHERE index_id>1)) 
4
select shema = s.name, table_name = o.name 
from sys.objects o 
join sys.schemas s on o.schema_id = s.schema_id 
where type = 'U' 
and not exists (select i.index_id 
       from sys.indexes i 
       where i.type <> 0 --ignore default heap index row 
       and o.object_id = i.object_id) 

संपादित करें:
मैं एसक्यूएल अद्यतन किया है के रूप में अनुरोध स्कीमा नाम शामिल करने के लिए। (ध्यान दें मैं sys.objects sysobjects स्कीमा कि SQL 2005 में शुरू किए गए थे के लिए पूरा करने के लिए के बजाय करना पड़ा)

सूची टेबल एसक्यूएल सर्वर दस्तावेज में लिखित हैं, को देखने के this link.
This FAQ अधिक नमूने और शामिल भी उपयोगी हो सकता है।

ध्यान दें कि ये सिस्टम टेबल हैं और संभवतः SQL सर्वर संस्करणों के बीच बदल सकते हैं, जहां संभव हो, सिस्टम तालिका-स्वतंत्र विचारों का उपयोग करें जिन्हें Information Schema Views कहा जाता है।

+0

मैं कैसे इन वस्तुओं के लिए स्कीमा मिलता है –

+0

वे अभी भी 2005/2008 'अनुकूलता के विचारों के रूप में में मान्य कर रहे हैं।मैंने अपना खुद का संस्करण पोस्ट किया है जो 2005/2008 सिस्टम ऑब्जेक्ट्स –

+0

@Raj More का उपयोग करता है, मैंने स्कीमा नाम के साथ अपना उत्तर अपडेट किया है जैसा अनुरोध किया गया है –

4

@ फिलिप फॉरी के सुझाव के अलावा आप सोच सकते हैं कि कौन से इंडेक्स बनाने के लिए।

एक बार जब आप अपना डेटा एक्सेस कर लेते हैं, तो SQL Server 2008 उन स्थानों का ट्रैक रखता है जहां यह सोचता है कि इंडेक्स उपयोगी होंगे (यह इन्हें "लापता इंडेक्स" के रूप में संदर्भित करता है। नए डायनेमिक प्रबंधित दृश्यों से भरा हाथ है जो दिखा सकता है इन लापता अनुक्रमित और उनके बारे में कुछ जानकारी

MSSQlTips से:।

  • sys.dm_db_missing_index_details - एक लापता सूचकांक बारे में विस्तृत जानकारी देता है
  • sys.dm_db_missing_index_group_s tats -
  • sys.dm_db_missing_index_groups लापता सूचकांक समूहों के बारे में संक्षिप्त जानकारी देता है - डेटाबेस तालिका स्तंभ है कि एक सूचकांक के लिए याद कर रहे हैं के बारे में जानकारी देता है -
  • sys.dm_db_missing_index_columns (index_handle) लापता अनुक्रमित के एक विशिष्ट समूह के बारे में जानकारी देता है। यह एक फ़ंक्शन है और इसे इंडेक्स_हेंडल पास करने की आवश्यकता है।
5

है यहाँ एक उदाहरण है:

select SCHEMA_NAME(schema_id), name from sys.tables 
where OBJECTPROPERTY(object_id, 'IsIndexed')= 0 
संबंधित मुद्दे