2009-11-25 9 views
26

मुझे यह देखने के लिए एक प्रश्न की आवश्यकता है कि तालिका में पहले से कोई अनुक्रमणिका है या नहीं।तालिका पर अनुक्रमणिका को जांचने के लिए क्वेरी

+0

में डेटाबेस में एक मेज के लिए अनुक्रमित सूची एक संग्रहीत प्रक्रिया को बनाया गया है, यह सिर्फ \ d + तालिका है, MySQL में

desc है। एसक्यूएल सर्वर में, यह नरक के रूप में घुल गया है क्योंकि माइक्रोसॉफ्ट हम सभी के लिए जीवन कठिन बनाना चाहता है !! –

उत्तर

9

आप MySQL उपयोग कर रहे हैं आप चला सकते हैं SHOW KEYS FROM table या SHOW INDEXES FROM table

+0

पर्यावरण को बताने के लिए खेद है। इसका एसक्यूएल सर्वर 2008 – sine

1

ओरेकल पर:

SELECT index_name 
FROM user_indexes 
WHERE table_name = :table 
  • पर निर्धारित कॉलम अनुक्रमित और कॉलम:

    • मेज पर सभी अनुक्रमित निर्धारित सूचकांक:

      SELECT index_name 
          , column_position 
          , column_name 
          FROM user_ind_columns 
      WHERE table_name = :table 
      ORDER BY index_name, column_order 
      

    संदर्भ:

  • 6

    अधिकांश आधुनिक RDBMSs समर्थन INFORMATION_SCHEMA स्कीमा। यदि आपका समर्थन करता है, तो आप या तो INFORMATION_SCHEMA.TABLE_CONSTRAINTS या INFORMATION_SCHEMA.KEY_COLUMN_USAGE, या शायद दोनों चाहते हैं। अगर तुम्हारा यह

    select count(*) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS

    संपादित चल रहा जितना आसान है का समर्थन करता है

    देखने के लिए: एसक्यूएल सर्वर करता INFORMATION_SCHEMA है, और यह उनकी विक्रेता विशिष्ट तालिकाओं की तुलना में उपयोग करने के लिए आसान है, तो बस इसके साथ चलते हैं।

    +3

    जैसा कि नाम से पता चलता है, एएनएसआई मानक दृश्य, 'INFORMATION_SCHEMA.TABLE_CONSTRAINTS' केवल बाधाओं को दिखाता है। जबकि कुछ बाधाएं इंडेक्स हैं, सभी इंडेक्स बाधाएं नहीं हैं। यह दृश्य नियमित इंडेक्स नहीं दिखाएगा: यह केवल 'UNIQUE', 'प्राथमिक कुंजी', 'कुंजी कुंजी' या 'चेक' के 'CONSTRAINT_TYPE' को प्रदर्शित करता है। देखें [ से प्रासंगिक अनुभाग "SQL-99 पूर्ण, वास्तव में"] (https://mariadb.com/kb/en/sql-99-complete-really/16-sql-catalogs/the-information-schema/ info_schema-views/info_schematable_constraints /) –

    62

    एसक्यूएल सर्वर पर, यह एक निर्धारित तालिका के लिए सभी अनुक्रमित सूची जाएगा:

    select * from sys.indexes 
    where object_id = (select object_id from sys.objects where name = 'MYTABLE') 
    

    यह क्वेरी सूचकांक के बिना सभी तालिकाओं सूची जाएगा:

    SELECT name 
    FROM sys.tables 
    WHERE OBJECTPROPERTY(object_id,'IsIndexed') = 0 
    

    और यह एक दिलचस्प MSDN पूछे जाने वाले प्रश्न है संबंधित विषय पर:
    Querying the SQL Server System Catalog FAQ

    +1

    मैं कैसे देख सकता हूं कि इन इंडेक्स को कौन से कॉलम पर रखा गया है? –

    +0

    ध्यान दिया जाना चाहिए कि तालिका में एक से अधिक इंडेक्स होने पर शीर्ष क्वेरी विफल हो जाएगी, 'object_id = को बदलें' (ऑब्जेक्ट_आईडी के साथ 'चुनें' (अगर आपको इंडेक्स के बारे में जानकारी देखने की आवश्यकता है, तो चुनें 'या सिर्फ क्वेरी को पूरा करना चाहते हैं त्रुटि के बिना। – Tor

    3

    यदि आपको केवल अनुक्रमित कॉलम ई की आवश्यकता है

    DECLARE @THETABLE varchar(100); 
    SET @THETABLE = 'theschema.thetable'; 
    select i.* 
        from sys.indexes i 
    where i.object_id = OBJECT_ID(@THETABLE) 
        and i.name is not NULL; 
    

    इस के लिए उपयोग मामला है: XEC sp_helpindex 'TABLE_NAME'

    2

    यहाँ मैं TSQL जो समस्या का ख्याल है कि मेरी तालिका नाम स्कीमा नाम और संभवतः डेटाबेस नाम हो सकता है ले लिया के लिए इस्तेमाल किया है कि मैं एक नामित टेबल के लिए इंडेक्स की सूची चाहता था, इसलिए मैं एक ऐसी प्रक्रिया लिख ​​सकता हूं जो तालिका में सभी इंडेक्स को गतिशील रूप से संपीड़ित करे।

    1

    सबसे पहले आप अपनी तालिका आईडी (उर्फ object_id)

    SELECT * FROM sys.objects WHERE type = 'U' ORDER BY name 
    

    तो आप स्तंभ के नाम प्राप्त कर सकते हैं की जाँच करें।उदाहरण के लिए यह सोचते हैं आप पहले की क्वेरी से 4 नंबर के रूप में object_id

    SELECT c.name 
    FROM sys.index_columns ic 
    INNER JOIN sys.columns c ON c.column_id = ic.column_id 
    WHERE ic.object_id = 4 
    AND c.object_id = 4 
    
    -1

    जांच इस रूप में अच्छी तरह यह एक डेटाबेस भर में संबद्ध बाधाओं के एक सिंहावलोकन देता है प्राप्त की। कृपया यह भी शामिल करना शामिल करें कि ब्याज के तालिका नाम के साथ स्थिति कहां से जानकारी प्रदान करती है।

    select a.TABLE_CATALOG as DB_name,a.TABLE_SCHEMA as tbl_schema, a.TABLE_NAME as tbl_name,a. CONSTRAINT_NAME as constraint_name,b.CONSTRAINT_TYPE from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE a join INFORMATION_SCHEMA.TABLE_CONSTRAINTS b on a.CONSTRAINT_NAME=b.CONSTRAINT_NAME

    1

    postgres में एसक्यूएल सर्वर

    create procedure _ListIndexes(@tableName nvarchar(200)) 
    as 
    begin 
    /* 
    exec _ListIndexes '<YOUR TABLE NAME>' 
    */ 
    SELECT DB_NAME(DB_ID()) as DBName,SCH.name + '.' + TBL.name AS TableName,IDX.name as IndexName, IDX.type_desc AS IndexType,COL.Name as ColumnName,IC.* 
        FROM sys.tables AS TBL 
         INNER JOIN sys.schemas AS SCH ON TBL.schema_id = SCH.schema_id 
         INNER JOIN sys.indexes AS IDX ON TBL.object_id = IDX.object_id 
         INNER JOIN sys.index_columns IC ON IDX.object_id = IC.object_id and IDX.index_id = IC.index_id 
         INNER JOIN sys.columns COL ON ic.object_id = COL.object_id and IC.column_id = COL.column_id 
         where TBL.name = @tableName 
        ORDER BY TableName,IDX.name 
    
    end 
    
    संबंधित मुद्दे

     संबंधित मुद्दे