मेरे पास स्क्रिप्ट है जिसका उपयोग मैं सभी गैर-क्लस्टर इंडेक्स को कैप्चर करने के लिए सिस्टम टेबल से पूछताछ करने के लिए करता हूं और अक्षम होने पर पूरा होने पर पुनर्निर्माण करता हूं। नीचे मानक संस्करण पर उपयोग के लिए है, यदि आप उद्यम पर हैं तो मैं ONLINE
जोड़ूंगा विकल्प।
अक्षम करें
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] DISABLE; '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql)
पुनर्निर्माण
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] REBUILD WITH (FILLFACTOR = 80); '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql);
मुझे यह तरीका पसंद है क्योंकि यह बहुत अनुकूलन योग्य है क्योंकि आप शर्तों के आधार पर कुछ तालिकाओं को बाहर/शामिल कर सकते हैं और साथ ही एक कर्सर से बच सकते हैं। साथ ही आप EXEC
. को भी बदल सकते हैं एक PRINT
. के लिए और वह कोड देखें जो इसे निष्पादित करेगा और इसे मैन्युअल रूप से चलाएगा।
तालिका बहिष्कृत करने की शर्त
AND o.name NOT IN ('tblTest','tblTest1');