Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

बड़ी संख्या में कॉलम, सभी का चयन करें हमेशा के लिए लेता है

InnoDB "विस्तृत" तालिकाओं को एक अलग तरीके से संग्रहीत करता है। सभी स्तंभों को एक साथ एक स्ट्रिंग (प्लस ओवरहेड, जैसे लंबाई, आदि) में रखने के बजाय, यह निम्न कार्य करता है:

  • यदि किसी पंक्ति के सभी स्तंभों का योग लगभग 8KB से अधिक है, तो यह कुछ डेटा को दूसरे ("ऑफ-रिकॉर्ड") संग्रहण क्षेत्र में स्थानांतरित कर देगा।
  • कौन से कॉलम ऑफ-रिकॉर्ड स्थानांतरित किए गए हैं, कॉलम के आकार आदि पर निर्भर करता है।
  • विवरण ROW_FORMAT . पर निर्भर करता है चुना गया।
  • "ऑफ-रिकॉर्ड" एक और 16KB ब्लॉक (या ब्लॉक) है।
  • बाद में, करते समय SELECT * (या कम से कम ऑफ-रिकॉर्ड कॉलम लाने के लिए), इसे एक और डिस्क फ़ेच करना होगा।

क्या करें?

  • इतने सारे कॉलम होने पर पुनर्विचार करें।
  • "ऊर्ध्वाधर विभाजन" पर विचार करें, जिसमें आपके पास एक और तालिका है जिसमें चयनित TEXT है स्तंभ। अपने ऐप में एक्सेस पैटर्न के आधार पर कॉलम के समूह चुनने का सुझाव दें।
  • ऐसे कॉलम जो आमतौर पर काफी लंबे होते हैं, उन्हें क्लाइंट में कंप्रेस करके BLOB में स्टोर करने पर विचार करें। TEXT . के बजाय . अधिकांश "पाठ" 3:1 सिकुड़ता है। ब्लॉब्स को टेक्स्ट के समान ही ऑफ-रिकॉर्ड भेजा जाता है, हालांकि, ये संकुचित बूँदें छोटी होंगी, इसलिए इनके फैलने की संभावना कम होती है।
  • एसक्यूएल में अधिक प्रोसेसिंग करें - सभी पंक्तियों को वापस करने से बचने के लिए, या पूर्ण टेक्स्ट को वापस करने से बचने के लिए, आदि। जब क्लाइंट को बहुत सारे टेक्स्ट को आँख बंद करके फावड़ा करते हैं, तो नेटवर्क और क्लाइंट बीता हुआ समय में एक महत्वपूर्ण कारक बन जाते हैं, न सिर्फ SELECT , स्वयं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक रिलेशनल डेटाबेस स्कीमा खाली करें

  2. अन्य तालिका से डेटा के साथ अद्यतन तालिका यदि शून्य नहीं है?

  3. "ERROR 3942 (HY000) को ठीक करें:MySQL में VALUES स्टेटमेंट का उपयोग करते समय VALUES क्लॉज की प्रत्येक पंक्ति में कम से कम एक कॉलम होना चाहिए"

  4. MAX चुनें या सीमा के अनुसार ऑर्डर करें 1

  5. mysql मेरा कोड दृश्य क्यों बदलता है?