अपनी 70-433 परीक्षा की किताब के माध्यम से पढ़ते हुए, मैंने कुछ ऐसा सोचा था जिसे मैं काम नहीं कर सकता, फिर भी मेरा मानना है कि यह काम करता है। पैसेज कुछ इस तरह पढ़े:
कॉलम को PERSISTED के रूप में भी चिह्नित किया जाना चाहिए , जिसका अर्थ है कि SQL सर्वर भौतिक रूप से गणना में प्रत्येक बार किसी क्वेरी में संदर्भित होने के बजाय गणना में स्तंभ की अभिव्यक्ति का परिणाम संग्रहीत करता है।
इससे मुझे दो बातें समझ में आती हैं:
- एक गैर-सुसंगत गणना किए गए स्तंभ की गणना हर बार किसी क्वेरी में संदर्भित होती है
- क्योंकि गणना किए गए कॉलम के लिए कुछ भी संग्रहीत नहीं है, मुझे लगता है कि कॉलम के लिए कोई सूचकांक नहीं बनाया जा सकता है।
इसे पढ़ने के बाद, मैंने सोचा कि यह थोड़ा अजीब था क्योंकि मैंने पिछले प्रोजेक्ट में गैर-जारी कॉलम पर एक इंडेक्स बनाने में कामयाबी हासिल की है।
किसी चीज के लिए एक इंडेक्स कैसे बनाया जा सकता है जो लंबे समय तक कायम नहीं है और क्या यह हानिकारक है?
यह साबित करने के लिए मैंने निम्नलिखित एसक्यूएल स्टेटमेंट चलाया है:
CREATE TABLE testTable
(
ID INT IDENTITY(1,1) PRIMARY KEY,
telephone VARCHAR(14),
c_areaCode AS (SUBSTRING(telephone,0,5)),
cp_areaCode AS (SUBSTRING(telephone,0,5)) PERSISTED
)
INSERT INTO testTable VALUES('09823 000000');
INSERT INTO testTable VALUES('09824 000000');
INSERT INTO testTable VALUES('09825 000000');
CREATE NONCLUSTERED INDEX IX_NotPersisted ON testTable(c_areaCode);
CREATE NONCLUSTERED INDEX IX_Persisted ON testTable(cp_areaCode);
और फिर निम्नलिखित प्रश्नों को चलाएं:
DBCC FREEPROCCACHE
DBCC FREESYSTEMCACHE('ALL');
DBCC DROPCLEANBUFFERS
GO
SELECT cp_areaCode FROM testTable;
GO
SELECT c_areaCode FROM testTable;
उपरोक्त कोड के लिए क्वेरी योजना को देखने के बाद, मैं देख सकता हूं कि दोनों चुनिंदा क्वेरी गैर-अनुक्रमणित सूचकांक का उपयोग कर रहे हैं। फिर, कैसे?
