2011-09-28 20 views
19

से इंडेक्स निर्माण दिनांक प्राप्त करें मुझे इंडेक्स की निर्माण तिथि कैसे मिल सकती है। मैं SQL2008 R2 का उपयोग कर रहा हूं। मैंने sys.indexes की जांच की लेकिन इसकी कोई तिथि नहीं है इसलिए मैं sys.objects के साथ क्वेरी में शामिल हो गया। बात यह है कि एक इंडेक्स के लिए ऑब्जेक्ट आईडी और उस इंडेक्स वाली तालिका समान है।एसक्यूएल सर्वर

मैं इस क्वेरी का उपयोग कर रहा हूँ ...

select i.name, i.object_id, o.create_date, o.object_id, o.name 
from sys.indexes i 
join sys.objects o on i.object_id=o.object_id 
where i.name = 'Index_Name' 

धन्यवाद!

+0

आप इंडेक्स के लिए निर्माण तिथि क्यों चाहते हैं? – Ariel

+0

dba.stackexchange.com –

+0

मुझे किसी विशेष तालिका पर बनाई गई नवीनतम अनुक्रमणिका को ढूंढना है – vinay

उत्तर

5

इस प्रयास करें:

SELECT 
    i.name 'Index Name', 
    o.create_date 
FROM 
    sys.indexes i 
INNER JOIN 
    sys.objects o ON i.name = o.name 
WHERE 
    o.is_ms_shipped = 0 
    AND o.type IN ('PK', 'FK', 'UQ') 

object_id तालिका सूचकांक अनुक्रमित कि बाधाओं हैं पर ....

+4

PKS और UQs (बाधाओं) के अलावा इंडेक्स sys.objects में पंक्तियां नहीं हैं ... – gbn

+1

यह सच है लेकिन यह केवल तालिका संख्या सूचकांक के लिए Create_Date देगा – vinay

+2

एफके इंडेक्स नहीं हैं, है ना? –

11

बनाई गई है को संदर्भित करता है, तो अन्य के लिए marc_s 'जवाब

देखना इंडेक्स, आपको एसएसएटीएस_DATE का उपयोग एसोसिएटेड इंडेक्स के निर्माण समय को प्राप्त करने के लिए करना होगा (प्रत्येक इंडेक्स में इसके आंकड़े हैं)

कुछ ऐसा नहीं (नहीं परीक्षण किया)

SELECT STATS_DATE(OBJECT_ID('MyTable'), 
(SELECT index_id FROM sys.indexes WHERE name = 'Index_Name')) 

यह sys.indexes पर निर्भर करता है sys.stats के लिंक

संपादित करें: वहाँ के रूप में किसी को भी पता कर सकते हैं पता लगाने के लिए जहाँ तक कोई रास्ता नहीं है। माफ़ कीजिये।

+0

'STATS_DATE' आंकड़े अपडेट किए जाने का समय देता है AFAIK –

+0

@ मार्टिन स्मिथ: आप सही हैं। मैंने सोचा कि यह दोनों को दिया गया है: यहां SQL सर्वर स्थापित नहीं है * और * एमएसडीएन नहीं पढ़ा है ... – gbn

+1

"कोई रास्ता नहीं है" दुखद रूप से एकमात्र सही जवाब है। –

2
select 
    crdate, i.name, object_name(o.id) 
from 
    sysindexes i 
join 
    sysobjects o ON o.id = i.id 
where 
    i.name = 'My_Index_Name' 
+4

यह आपको तालिका की बनाई गई तारीख देने के लिए जा रहा है, सूचकांक नहीं। –

+1

एसक्यूएल सर्वर ** 2005 ** या नए के रूप में, आपको 'sys' स्कीमा में कैटलॉग व्यू का उपयोग करना चाहिए -' sys.indexes' '('sysindexes' के बजाय) और' sys.objects' या बेहतर अभी तक उपयोग करें: ' sys.tables' ('sysobjects' के बजाय) –

1

जब पीके या यूके बनाया जाता है, तो SQL सर्वर स्वचालित रूप से उस बाधाओं के लिए अद्वितीय अनुक्रमणिका बनाता है। उन बाधाओं का create_date संबंधित इंडेक्स के लिए निर्माण दिनांक के समान होगा।

चूंकि sys.indexes दृश्य में create_date कॉलम नहीं है, यह इस तरह की जानकारी खोजने के लिए बिल्कुल बेकार है। इसके अलावा, इस दृश्य में object_id कॉलम कभी भी संबंधित बाधा को संदर्भित नहीं करेगा। यह सूचकांक से संबंधित तालिका को इंगित करेगा।

CREATE TABLE dbo.TEST_T1 
(
    COLUMN_1 INT NOT NULL, 
    COLUMN_2 INT NOT NULL, 
    CONSTRAINT PK_TEST_T1 PRIMARY KEY (COLUMN_1) 
) 
GO 
WAITFOR DELAY '00:00:01'; 

ALTER TABLE dbo.TEST_T1 
    ADD CONSTRAINT UK_TEST_T1 UNIQUE (COLUMN_2) 
GO 

SELECT O.name, O.object_id, O.create_date, I.object_id, I.name AS index_name 
FROM sys.objects AS O 
    LEFT OUTER JOIN sys.indexes AS I ON O.object_id = i.object_id 
WHERE O.name IN ('TEST_T1', 'PK_TEST_T1', 'UK_TEST_T1') 

परिणाम है::

name  object_id create_date    object_id index_name 
PK_TEST_T1 272720024 2015-03-17 11:02:47.197 NULL  NULL 
TEST_T1  256719967 2015-03-17 11:02:47.190 256719967 PK_TEST_T1 
TEST_T1  256719967 2015-03-17 11:02:47.190 256719967 UK_TEST_T1 
UK_TEST_T1 288720081 2015-03-17 11:02:48.207 NULL  NULL 

इसलिए, यदि आप पी या ब्रिटेन अनुक्रमित के लिए create_date देखने के लिए sys.indexes साथ शामिल होने की कोई जरूरत नहीं है चाहता हूँ निम्न परीक्षण बिंदु का प्रदर्शन करेंगे । आप sys.objects से चयन करना चाहिए:

SELECT name, object_id, create_date 
FROM sys.objects 
WHERE name IN ('PK_TEST_T1', 'UK_TEST_T1') 
AND type IN ('PK', 'UQ') 

परिणाम है: (के आंकड़े) के आदेश दिनांक अवरोही क्रम में अनुक्रमित सूची

name  object_id create_date 
PK_TEST_T1 272720024 2015-03-17 11:02:47.197 
UK_TEST_T1 288720081 2015-03-17 11:02:48.207 
6

सरल क्वेरी। यह तिथि अंतिम आंकड़े अद्यतनों का सार है, इसलिए हाल ही में बनाई गई इंडेक्स के लिए केवल विश्वसनीय है।

select STATS_DATE(so.object_id, index_id) StatsDate 
, si.name IndexName 
, schema_name(so.schema_id) + N'.' + so.Name TableName 
, so.object_id, si.index_id 
from sys.indexes si 
inner join sys.tables so on so.object_id = si.object_id 
order by 1 desc 
0
USE [YourDB Name] 
SET NOCOUNT ON 

DECLARE @Table_Name varchar(200) 
DECLARE @Index_Name varchar(200) 
DECLARE @Index_Type varchar(50) 

DECLARE Indx_Cursor CURSOR 
STATIC FOR 
      select s_tab.name as Table_Name,s_indx.name as Index_Name,s_indx.type_desc as Index_Type 
      from sys.indexes s_indx 
      inner join sys.tables s_tab on s_tab.object_id=s_indx.object_id 
      where s_indx.name is not null; 

OPEN Indx_Cursor 
    IF @@CURSOR_ROWS > 0 
     BEGIN 
      FETCH NEXT FROM Indx_Cursor INTO @Table_Name,@Index_Name,@Index_Type 

      WHILE @@Fetch_status = 0 
       BEGIN 
        INSERT INTO INDEX_HISTORY(table_name,index_name,Index_Type,Created_date) 
        SELECT @Table_Name,@Index_Name,@Index_Type,STATS_DATE(OBJECT_ID(@Table_Name), 
        (SELECT index_id FROM sys.indexes WHERE name = @Index_Name))as Index_create_Date 

        FETCH NEXT FROM Indx_Cursor INTO @Table_Name,@Index_Name,@Index_Type 
       END 
     END 

CLOSE Indx_Cursor 
DEALLOCATE Indx_Cursor 

select distinct * from index_history 

लेकिन अनुक्रमित की मुख्य समस्या यह है जब हम फिर से बनाना या पुनर्निर्माण अनुक्रमित तो सूचकांक निर्माण तिथि तिथि बदल कर हो जाता है कि जब सूचकांक पिछले पुनर्निर्माण या पुनर्गठित किया गया है।

3

यह अब काफी मृत धागा है, लेकिन SQLPanda से नीचे दिए गए क्वेरी मुझे जानकारी मैं एक गैर क्लस्टर सूचकांक के लिए Azure एसक्यूएल पर की जरूरत है:

SELECT OBJECT_NAME(i.object_id) AS TableName, i.object_id, i.name, i.type_desc,o.create_date, o.modify_date,o.type,i.is_disabled 
FROM sys.indexes i 
     INNER JOIN sys.objects o ON i.object_id = o.object_id 
WHERE o.type NOT IN ('S', 'IT') 
    AND o.is_ms_shipped = 0 
    AND i.name IS NOT NULL 
ORDER BY modify_date DESC 

क्रेडिट http://www.sqlpanda.com/2013/10/how-to-check-index-creation-date.html

को मैं सिर्फ जोड़ा उस संशोधित तिथि के बाद से मुझे वह जानकारी थी जिसमें मुझे रूचि थी।

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