जबकि मैं असहमत हूं कि बीएलओबी सिर्फ एक और तालिका में होना चाहिए - वे डेटाबेस में बिल्कुल भी नहीं होना चाहिए । एक पॉइंटर को स्टोर करें जहां फ़ाइल डिस्क पर रहती है, और उसके बाद डेटाबेस से प्राप्त करें ...
प्राथमिक मुद्दा वे कारण (मेरे लिए) अनुक्रमण के साथ है। एक्सएमएल का उपयोग क्वेरी प्लान के साथ करें, क्योंकि सभी के पास, आइए एक तालिका बनाएं:
SELECT TOP 1000
ID = IDENTITY(INT,1,1),
deq.query_plan
INTO dbo.index_test
FROM sys.dm_exec_cached_plans AS dec
CROSS APPLY sys.dm_exec_query_plan(dec.plan_handle) AS deq
ALTER TABLE dbo.index_test ADD CONSTRAINT pk_id PRIMARY KEY CLUSTERED (ID)
यह केवल 1000 पंक्तियाँ हैं, लेकिन आकार पर जाँच ...
sp_BlitzIndex @DatabaseName = 'StackOverflow', @SchemaName = 'dbo', @TableName = 'index_test'
यह सिर्फ 1000 पंक्तियों के लिए 40 एमबी से अधिक है। यदि आप हर 1000 पंक्तियों में 40 एमबी जोड़ते हैं, तो यह बहुत जल्दी बदसूरत प्राप्त कर सकता है। जब आप 1 मिलियन पंक्तियों को मारते हैं तो क्या होता है? यह सिर्फ 1 टीबी डेटा है, वहां।
आपके क्लस्टर्ड इंडेक्स का उपयोग करने के लिए आवश्यक किसी भी क्वेरी को अब उस BLOB डेटा को मेमोरी स्पष्टीकरण में पढ़ने की आवश्यकता है : जब BLOB डेटा कॉलम संदर्भित होता है।
क्या आप BLOB के भंडारण की तुलना में SQL सर्वर मेमोरी का उपयोग करने के बेहतर तरीकों के बारे में सोच सकते हैं? क्योंकि मुझे यकीन है।
इसे गैर-अनुक्रमित अनुक्रमित तक विस्तारित करना:
CREATE INDEX ix_noblob ON dbo.index_test (ID)
CREATE INDEX ix_returnoftheblob ON dbo.index_test (ID) INCLUDE (query_plan)
आप अपने गैर-अनुक्रमित इंडेक्सों को बड़े पैमाने पर BLOB कॉलम से बचने के लिए डिज़ाइन कर सकते हैं, इसलिए नियमित प्रश्न क्लस्टर इंडेक्स से बच सकते हैं, लेकिन जैसे ही आपको BLOB कॉलम की आवश्यकता होती है, आपको क्लस्टर इंडेक्स की आवश्यकता होती है।
यदि आप इसे INCLUDED
कुंजी लुकअप परिदृश्य से बचने के लिए किसी गैर-अनुक्रमित अनुक्रमणिका के स्तंभ के रूप में जोड़ते हैं, तो आप विशाल गैर-अनुक्रमित अनुक्रमणिका के साथ समाप्त होते हैं:
अधिक समस्याओं के कारण वे:
- यदि कोई
SELECT *
क्वेरी चलाता है , तो उन्हें वह सभी BLOB डेटा मिलता है।
- वे बैकअप और रिस्टोर में जगह लेते हैं, उन्हें धीमा करते हैं
- वे धीमा कर देते हैं
DBCC CHECKDB
, क्योंकि मुझे पता है कि आप भ्रष्टाचार की जाँच कर रहे हैं, है ना?
- और अगर आप कोई इंडेक्स मेंटेन करते हैं, तो वे उसे भी धीमा कर देते हैं।
उम्मीद है की यह मदद करेगा!