यदि आप संबंधपरक तर्क से चिंतित नहीं हैं, तो वास्तव में तेज़ पढ़ने की गति चाहते हैं, और आप RDBMS के साथ काम करने के इच्छुक हैं, मैं MySQL कहने के लिए पूर्वाग्रह से उद्यम करूँगा। क्यों ???
MyISAM भंडारण इंजन में एक विकल्प है जो बेहतर प्रदर्शन के लिए तालिका की भौतिक संरचना को बढ़ाने की अनुमति दे सकता है। वह विकल्प क्या है? वैकल्पिक तालिका विकल्प ROW_FORMAT।
उदाहरण के लिए, पुस्तक MySQL डाटाबेस डिजाइन और ट्यूनिंग ROW_FORMAT = 72,73 पृष्ठों पर FIXED का उपयोग करने की सिफारिश करता है। यह सभी VARCHAR क्षेत्रों को आंतरिक रूप से CHAR में बदल देगा। यह MyISAM तालिका को बड़ा बना देगा, लेकिन इसके खिलाफ चयन निष्पादित बहुत तेज हो जाएगा। मैं व्यक्तिगत रूप से इस पर ध्यान दे सकता हूं। मेरे पास एक बार एक मेज थी जो 1.9GB की थी। मैंने ALTER TABLE tblname ROW_FORMAT = FIXED के साथ प्रारूप बदला। तालिका 3.7GB समाप्त हुई। इसके खिलाफ चयनों की गति 20-25% तेज थी, बिना कुछ और सुधार या परिवर्तन के।
यदि आपके पास पहले से ही एक MyISAM तालिका है जो डेटा से आबाद है? आप MyISAM तालिका में मौजूद डेटा के आधार पर अनुशंसित स्तंभ परिभाषाओं के लिए मीट्रिक प्राप्त कर सकते हैं। क्या प्रश्न उन मैट्रिक्स को प्रस्तुत करता है?
SELECT * FROM tblname PROCEDURE ANALYSE();
प्रक्रिया विश्लेषण () यह डेटा प्रदर्शित नहीं करेगा। यह हर कॉलम का मूल्य पढ़ेगा और कॉलम परिभाषाओं की सिफारिश करेगा। उदाहरण के लिए, यदि आपके पास एक प्रकार का कॉलम है, जिसका मान 1-4 है, तो यह उन 4 मानों में से एक का उपयोग करके सबसे अधिक सुगम होगा। तब आप TINYINT या CHAR (1) का उपयोग करना चुन सकते हैं क्योंकि वे समान मात्रा में अंतरिक्ष (1 बाइट) लेते हैं।
यहाँ पर विचार करने के लिए कुछ और है: जब से आप एक NoSQL DB का उपयोग करने के बारे में सोच रहे थे, क्या आपने कभी NoSQL तरीके से MyISAM का उपयोग करने के बारे में सोचा है? यह काफी संभव है। उसी पुस्तक का पृष्ठ १ book५ जिसमें मैंने उल्लेख किया है कि संबंधपरक सामान के बिना एक तालिका को पढ़ने के लिए हैण्डलर संरचनाओं का उपयोग किया जाता है । वास्तव में, पृष्ठ 175 यह उदाहरण देता है:
CREATE TABLE customer_mileage_details
(
customer_id INT NOT NULL,
ff_number CHAR(10) NOT NULL,
transaction_date DATE NOT NULL,
mileage SMALLINT NOT NULL,
INSERT(customer_id),
INSERT (ff_number,transaction_date)
) ENGINE = MYISAM;
इस तालिका में लाखों पंक्तियाँ हैं। मान लें कि आपको एक डेटा विश्लेषण बनाने की आवश्यकता है जिसमें निम्नलिखित आवश्यकताएं हैं:
- इसे जितनी जल्दी हो सके जानकारी के ब्लॉक प्राप्त करने की आवश्यकता है।
- उपयोगकर्ता इनपुट या अन्य कारकों के आधार पर, यह संभवतः तालिका में "चारों ओर कूद" होगा।
- यह संगामिति या अन्य डेटा अखंडता मुद्दों के साथ संबंध नहीं है।
- क्रॉस-एप्लिकेशन टेबल लॉकिंग की आवश्यकता नहीं है।
ये आदेश तालिका से त्वरित और गंदे पढ़ने की अनुमति देते हैं:
HANDLER customer_mileage_details OPEN;
HANDLER customer_mileage_details READ ff_number FIRST WHERE ff_number=('aaetm-4441');
HANDLER customer_mileage_details READ NEXT LIMT 10;
HANDLER customer_mileage_details CLOSE;
मुझे उम्मीद है कि यह विचार के लिए भोजन दे। कृपया इस पर गौर करें।
चेतावनी
मेरे बारे में यह विशेष रूप से पोस्ट लिखने के बारे में बहुत ही विडंबना है कि मैंने हंडलर के बारे में एक पूर्व पोस्ट को पेरकोना सर्वर बायनेरी में इस्तेमाल किया जा रहा है और सोच रहा था कि इसका उपयोग करना पुराना था । उस पुराने पोस्ट के बाद से, मैंने कभी नहीं सोचा था कि मैं कभी भी हैण्डलर संरचनाओं के समर्थन में कुछ लिखूंगा। मैं अब सही हो गया।