MySQL Performance Optimization Tips
MySQL performance, query Optimization, SQL performance, Indexing
SQL Performance Tips
इस ब्लॉग मे हम Table Creation करने से लेकर उस पर Join लगाना और Filter करने से Related जो भी Changes करना होते हैं या ध्यान रखना होता हैं वह सभी हम इस Blog मे समझेंगे ।
💡 डेटाबेस की स्पीड और परफॉर्मेंस किसी भी वेब ऐप या सॉफ्टवेयर की जान होती है।
अगर आपका MySQL डेटाबेस तेज़ चले, तो न केवल यूजर एक्सपीरियंस बेहतर होता है बल्कि सर्वर की लोड भी कम होती है।
इस ब्लॉग में हम स्टेप-बाय-स्टेप देखेंगे कि —
👉 टेबल बनाते समय,
👉 कॉलम चुनते समय,
👉 क्वेरी (WHERE, JOIN, SUM आदि) लिखते समय
क्या-क्या ध्यान रखना चाहिए ताकि परफॉर्मेंस बेहतर बनी रहे।
Table of Contents
🧱 1. Table Design करते समय क्या ध्यान रखें
- Normalization का इस्तेमाल करें (3NF तक)
- डाटा को अलग-अलग रिलेटेड टेबल्स में बाँटें।
- Duplicate डाटा ना रखें।
- इससे डाटा छोटा, साफ़ और maintainable रहता है।
- Unnecessary Columns मत बनाएं
- Example: अगर सिर्फ Date चाहिए तो
DATETIMEकी जगहDATEरखें। - अगर Gender सिर्फ ‘M’ या ‘F’ है तो
CHAR(1)ही काफी है।
- Example: अगर सिर्फ Date चाहिए तो
- Proper Primary Key चुनें
- हमेशा numeric primary key (जैसे
INT AUTO_INCREMENT) का इस्तेमाल करें। - Text primary key या multi-column key पर join धीमे चलते हैं।
- हमेशा numeric primary key (जैसे
- Foreign Key का प्रयोग सोच-समझकर करें
- अगर constraints की जरूरत नहीं है तो सिर्फ indexing से भी काम चल जाता है।
- Storage Engine का चुनाव करें
- ज़्यादातर केस में
InnoDBबेहतर है क्योंकि यह transaction-safe और तेज़ है। - अगर read-heavy सिस्टम है (reporting type), तो
MyISAMपर विचार कर सकते हैं।
- ज़्यादातर केस में
🧮 2. Column बनाते समय सही Data Type चुनें
- Numeric Columns
- Size जितना छोटा रख सकते हैं रखें।
उदाहरण:TINYINT(1 byte),INT(4 byte),BIGINT(8 byte)।
अगर यूज़र की गिनती 10000 से कम है तोSMALLINTकाफी है।
- Size जितना छोटा रख सकते हैं रखें।
- Text Columns
- Fixed length (
CHAR) vs Variable length (VARCHAR)- अगर length fix है जैसे PIN code (6 digit), तो
CHAR(6)। - अगर variable है जैसे नाम या पता, तो
VARCHAR(100)।
- अगर length fix है जैसे PIN code (6 digit), तो
- Fixed length (
- Date Columns
- केवल तारीख चाहिए तो
DATE - तारीख और समय दोनों चाहिए तो
DATETIMEयाTIMESTAMP।
- केवल तारीख चाहिए तो
- Default Values का इस्तेमाल करें
- Null values कम रखें क्योंकि वो comparison में extra cost बढ़ाते हैं।
⚙️ 3. Indexing – SQL Performance का असली हथियार
🔸 Index क्या करता है?
Index MySQL को data जल्दी ढूंढने में मदद करता है — जैसे किताब में Index page।
🔸 Index कब बनाना चाहिए?
- जो column WHERE, JOIN, ORDER BY, GROUP BY में बार-बार आता है,
उन पर index बनाएं।
🔸 Index कैसे बनाएं?
CREATE INDEX idx_customer_name ON customers(customer_name);
🔸 Composite Index (multi-column index)
अगर अक्सर यह query चलती है:
SELECT * FROM orders WHERE customer_id = 5 AND order_date = '2025-10-01';
तो composite index बनाएं:
CREATE INDEX idx_cust_orderdate ON orders(customer_id, order_date);
📌 ध्यान दें:
Composite index हमेशा left to right rule पर चलता है — यानी पहला column हमेशा WHERE में होना चाहिए।
🔍 4. WHERE Filter लिखते समय SQL Performance Tips
- Function-based condition से बचें
❌WHERE YEAR(order_date) = 2025
✅WHERE order_date BETWEEN '2025-01-01' AND '2025-12-31' - LIKE में शुरुआत में % से बचें
❌WHERE name LIKE '%ram%'
✅WHERE name LIKE 'ram%' - IN की जगह EXISTS या JOIN का प्रयोग करें (कुछ केस में तेज़ होता है)
SELECT * FROM orders WHERE EXISTS (SELECT 1 FROM customers WHERE customers.id = orders.customer_id); - LIMIT का प्रयोग करें
- अगर बहुत बड़ा डेटा है तो pagination ज़रूरी है।
जैसे:LIMIT 50 OFFSET 0
- अगर बहुत बड़ा डेटा है तो pagination ज़रूरी है।
🔗 5. JOIN करते समय SQL Performance बढ़ाने के Tips
- Join Columns पर Index होना चाहिए
CREATE INDEX idx_customer_id ON orders(customer_id); - Join order maintain करें
- हमेशा छोटी टेबल को पहले join करें, फिर बड़ी टेबल को।
- Only Required Columns Select करें
❌SELECT *
✅SELECT name, amount, order_date - INNER JOIN vs LEFT JOIN
- जब दोनों टेबल में matching data चाहिए, तब
INNER JOIN। - Performance-wise
INNER JOINथोड़ा तेज़ होता है।
- जब दोनों टेबल में matching data चाहिए, तब
- JOIN के बाद Aggregate (SUM, COUNT) करने से पहले Filtering करें
SELECT c.name, SUM(o.amount) FROM orders o INNER JOIN customers c ON c.id = o.customer_id WHERE o.status = 'PAID' GROUP BY c.name;
🧾 6. Aggregate Functions (SUM, COUNT, AVG…) Optimize करने के तरीके
- GROUP BY Columns पर Index बनाएं
CREATE INDEX idx_group_status ON orders(status); - Filtered Aggregation करें
यानी पहले WHERE लगाएं, फिर SUM करें। - Subquery की जगह Derived Table या Temporary Table का प्रयोग करें
अगर बार-बार वही calculation करनी है तो एक temporary table बना लें।
🚀 7. जब Table में Data बहुत ज़्यादा हो (Large Tables)
- Partitioning का इस्तेमाल करें
- जैसे
order_dateके हिसाब से year-wise partitions।
- जैसे
- Archiving पुराना डेटा
- पुराना (inactive) डेटा किसी दूसरे archive table में shift करें।
- EXPLAIN कमांड से Query Analyze करें
EXPLAIN SELECT * FROM orders WHERE customer_id = 5;यह बताएगा कि कौन सा index use हो रहा है और कौन सा नहीं। - Slow Query Log ऑन करें
slow_query_log = 1 long_query_time = 2इससे आप देख पाएंगे कौन सी query सबसे धीमी है।
🧠 8. Extra Optimization Tips
- Caching का उपयोग करें (जैसे Redis या Memcached)
- Prepared Statements का इस्तेमाल करें।
- Avoid too many joins (3-4 से ज़्यादा join performance घटा सकते हैं)
- Regularly Analyze and Optimize Tables
ANALYZE TABLE orders; OPTIMIZE TABLE orders;
✍️ निष्कर्ष (Conclusion) SQL Performance
अगर आप MySQL की performance को मजबूत बनाना चाहते हैं तो शुरुआत करें —
- Table design से,
- फिर सही Data Type से,
- फिर Index और Query Optimization से।
छोटी-छोटी गलतियां (जैसे गलत data type, unindexed join, या SELECT *) आपकी query को 10 गुना धीमा बना सकती हैं।
इसलिए हमेशा query run करने से पहले EXPLAIN करें और index usage check करें।
हमारे अन्य आर्टिकल
- MySQL Function
- MySQL Stored Procedure
- PHP Get /Post Method के बारे में जाने
- PHP Math Function के बारे में जाने
- C से C ++ सीखे सरल शब्दों में
- PHP Variable के बारे में जाने
- Arduino Control Structure
- Union in C
- Declaration of Pointer in C
- jQuery Search Filter
- MySQL Create Table | Alter Table | Drop Table
- API Using NODE REACT EXPRESS MYSQL SEQUELIZE (For Backend OR Server Side)
- CPANEL In Hindi