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

कॉलम के लिए अनुकूलित डेटाटाइप कैसे चुनें [innodb विशिष्ट]?

संक्षिप्त सारांश:

(सिर्फ मेरे विचार)

  1. ईमेल पते के लिए - VARCHAR(255)
  2. उपयोगकर्ता नाम के लिए - VARCHAR(100) या VARCHAR(255)
  3. id_username के लिए - INT का उपयोग करें (जब तक आप अपने सिस्टम में 2 अरब से अधिक उपयोगकर्ताओं की योजना नहीं बनाते)
  4. फ़ोन नंबर - INT या VARCHAR या शायद CHAR (इस पर निर्भर करता है कि आप फॉर्मेटिंग को स्टोर करना चाहते हैं या नहीं)
  5. पोस्ट - TEXT
  6. तारीख - DATE या DATETIME (निश्चित रूप से पोस्ट या ईमेल जैसी चीज़ों के लिए समय शामिल करें)
  7. पैसा - DECIMAL(11,2)
  8. विविध - नीचे देखें

जहाँ तक InnoDB का उपयोग करने की बात है क्योंकि VARCHAR तेज होना चाहिए, मैं इसके बारे में चिंता नहीं करता, या सामान्य रूप से गति। InnoDB का उपयोग करें क्योंकि आपको लेनदेन करने की आवश्यकता है और/या आप डेटा अखंडता के लिए विदेशी कुंजी बाधाओं (FK) का उपयोग करना चाहते हैं। साथ ही, InnoDB रो लेवल लॉकिंग का उपयोग करता है जबकि MyISAM केवल टेबल लेवल लॉकिंग का उपयोग करता है। इसलिए, InnoDB, MyISAM की तुलना में उच्च स्तर की समरूपता को बेहतर ढंग से संभाल सकता है। पूर्ण-पाठ अनुक्रमणिका का उपयोग करने के लिए और कुछ हद तक कम ओवरहेड के लिए MyISAM का उपयोग करें।

इंजन प्रकार की तुलना में गति के लिए अधिक महत्वपूर्ण:उन स्तंभों पर अनुक्रमित करें जिन्हें आपको जल्दी से खोजने की आवश्यकता है। हमेशा अपने आईडी/पीके कॉलम पर इंडेक्स लगाएं, जैसे कि id_username जिसका मैंने उल्लेख किया है।

अधिक विवरण:

यहाँ MySQL डेटाटाइप और डेटाबेस डिज़ाइन के बारे में प्रश्नों का एक समूह है (चेतावनी, आपके द्वारा मांगी गई तुलना में अधिक):

और InnoDB इंजन का उपयोग कब करें, इस पर कुछ प्रश्न:

मैं बस tinyint का उपयोग करता हूं लगभग हर चीज के लिए (गंभीरता से)।

संपादित करें - "पोस्ट:" कैसे स्टोर करें

अधिक विवरण के साथ कुछ लिंक नीचे दिए गए हैं, लेकिन यहां संक्षिप्त संस्करण है। "पोस्ट" संग्रहीत करने के लिए, आपको एक लंबी टेक्स्ट स्ट्रिंग के लिए जगह चाहिए। CHAR अधिकतम लंबाई 255 है, इसलिए यह कोई विकल्प नहीं है, और निश्चित रूप से CHAR अप्रयुक्त वर्णों बनाम VARCHAR . को बर्बाद कर देगा , जो परिवर्तनीय लंबाई है CHAR

MySQL 5.0.3 से पहले, VARCHAR अधिकतम लंबाई 255 थी, इसलिए आपके पास TEXT . रह जाएगा . हालाँकि, MySQL के नए संस्करणों में, आप VARCHAR . का उपयोग कर सकते हैं या TEXT . पसंद वरीयता के लिए नीचे आती है, लेकिन कुछ अंतर हैं। VARCHAR और TEXT अधिकतम लंबाई अब 65,535 दोनों है, लेकिन आप VARCHAR . पर अपना अधिकतम सेट कर सकते हैं . मान लें कि आपको लगता है कि आपकी पोस्ट केवल 2000 अधिकतम होनी चाहिए, आप VARCHAR(2000) सेट कर सकते हैं . यदि आप हर सीमा में भाग लेते हैं, तो आप ALTER . कर सकते हैं आप बाद में टेबल करते हैं और इसे VARCHAR(3000) . से टकराते हैं . दूसरी ओर, TEXT वास्तव में अपने डेटा को BLOB . में संग्रहीत करता है (1). मैंने सुना है कि VARCHAR . के बीच प्रदर्शन अंतर हो सकता है और TEXT , लेकिन मैंने कोई सबूत नहीं देखा है, इसलिए हो सकता है कि आप उस पर और गौर करना चाहें, लेकिन आप भविष्य में उस मामूली विवरण को हमेशा बदल सकते हैं।

इससे भी महत्वपूर्ण बात यह है कि LIKE . के बजाय पूर्ण-पाठ अनुक्रमणिका का उपयोग करके इस "पोस्ट" कॉलम को खोजना बहुत तेज होगा (2)। हालांकि, आपको पूर्ण-पाठ अनुक्रमणिका का उपयोग करने के लिए MyISAM इंजन का उपयोग करना होगा क्योंकि InnoDB इसका समर्थन नहीं करता है . एक MySQL डेटाबेस में, आपके पास प्रत्येक तालिका के लिए इंजनों का एक विषम मिश्रण हो सकता है, इसलिए आपको बस अपनी "पोस्ट" तालिका को MyISAM का उपयोग करने की आवश्यकता होगी। हालाँकि, यदि आपको InnoDB (लेन-देन के लिए) का उपयोग करने के लिए "पोस्ट" की आवश्यकता है, तो अपनी "पोस्ट" तालिका की MyISAM कॉपी को अपडेट करने के लिए एक ट्रिगर सेट करें और अपनी सभी पूर्ण-पाठ खोजों के लिए MyISAM कॉपी का उपयोग करें।

कुछ उपयोगी उद्धरणों के लिए नीचे देखें।

आखिरकार, यहां VARCHAR बनाम TEXT के फायदे और नुकसान के बारे में एक बेहतरीन पोस्ट दी गई है। यह प्रदर्शन के मुद्दे पर भी बात करता है:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. codeigniter mysql लेफ्ट जॉइन में शामिल हैं चुनें

  2. कोई डेटाबेस चयनित नहीं - PHP और MySQL

  3. JDBC कनेक्टर का उपयोग करके जावा से MySQL में UTF-8 डेटा को पढ़ने/लिखने में समस्या 5.1

  4. एंटिटी फ्रेमवर्क + MySQL क्लास जनरेटिंग

  5. एकल ODBC ExecuteNonQuery (C#) में एकाधिक सम्मिलित विवरण