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 आदि) लिखते समय
क्या-क्या ध्यान रखना चाहिए ताकि परफॉर्मेंस बेहतर बनी रहे।


🧱 1. Table Design करते समय क्या ध्यान रखें

  1. Normalization का इस्तेमाल करें (3NF तक)
    • डाटा को अलग-अलग रिलेटेड टेबल्स में बाँटें।
    • Duplicate डाटा ना रखें।
    • इससे डाटा छोटा, साफ़ और maintainable रहता है।
  2. Unnecessary Columns मत बनाएं
    • Example: अगर सिर्फ Date चाहिए तो DATETIME की जगह DATE रखें।
    • अगर Gender सिर्फ ‘M’ या ‘F’ है तो CHAR(1) ही काफी है।
  3. Proper Primary Key चुनें
    • हमेशा numeric primary key (जैसे INT AUTO_INCREMENT) का इस्तेमाल करें।
    • Text primary key या multi-column key पर join धीमे चलते हैं।
  4. Foreign Key का प्रयोग सोच-समझकर करें
    • अगर constraints की जरूरत नहीं है तो सिर्फ indexing से भी काम चल जाता है।
  5. Storage Engine का चुनाव करें
    • ज़्यादातर केस में InnoDB बेहतर है क्योंकि यह transaction-safe और तेज़ है।
    • अगर read-heavy सिस्टम है (reporting type), तो MyISAM पर विचार कर सकते हैं।

🧮 2. Column बनाते समय सही Data Type चुनें

  1. Numeric Columns
    • Size जितना छोटा रख सकते हैं रखें।
      उदाहरण: TINYINT (1 byte), INT (4 byte), BIGINT (8 byte)।
      अगर यूज़र की गिनती 10000 से कम है तो SMALLINT काफी है।
  2. Text Columns
    • Fixed length (CHAR) vs Variable length (VARCHAR)
      • अगर length fix है जैसे PIN code (6 digit), तो CHAR(6)
      • अगर variable है जैसे नाम या पता, तो VARCHAR(100)
  3. Date Columns
    • केवल तारीख चाहिए तो DATE
    • तारीख और समय दोनों चाहिए तो DATETIME या TIMESTAMP
  4. 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

  1. Function-based condition से बचें
    WHERE YEAR(order_date) = 2025
    WHERE order_date BETWEEN '2025-01-01' AND '2025-12-31'
  2. LIKE में शुरुआत में % से बचें
    WHERE name LIKE '%ram%'
    WHERE name LIKE 'ram%'
  3. IN की जगह EXISTS या JOIN का प्रयोग करें (कुछ केस में तेज़ होता है) SELECT * FROM orders WHERE EXISTS (SELECT 1 FROM customers WHERE customers.id = orders.customer_id);
  4. LIMIT का प्रयोग करें
    • अगर बहुत बड़ा डेटा है तो pagination ज़रूरी है।
      जैसे: LIMIT 50 OFFSET 0

🔗 5. JOIN करते समय SQL Performance बढ़ाने के Tips

  1. Join Columns पर Index होना चाहिए CREATE INDEX idx_customer_id ON orders(customer_id);
  2. Join order maintain करें
    • हमेशा छोटी टेबल को पहले join करें, फिर बड़ी टेबल को।
  3. Only Required Columns Select करें
    SELECT *
    SELECT name, amount, order_date
  4. INNER JOIN vs LEFT JOIN
    • जब दोनों टेबल में matching data चाहिए, तब INNER JOIN
    • Performance-wise INNER JOIN थोड़ा तेज़ होता है।
  5. 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 करने के तरीके

  1. GROUP BY Columns पर Index बनाएं CREATE INDEX idx_group_status ON orders(status);
  2. Filtered Aggregation करें
    यानी पहले WHERE लगाएं, फिर SUM करें।
  3. Subquery की जगह Derived Table या Temporary Table का प्रयोग करें
    अगर बार-बार वही calculation करनी है तो एक temporary table बना लें।

🚀 7. जब Table में Data बहुत ज़्यादा हो (Large Tables)

  1. Partitioning का इस्तेमाल करें
    • जैसे order_date के हिसाब से year-wise partitions।
  2. Archiving पुराना डेटा
    • पुराना (inactive) डेटा किसी दूसरे archive table में shift करें।
  3. EXPLAIN कमांड से Query Analyze करें EXPLAIN SELECT * FROM orders WHERE customer_id = 5; यह बताएगा कि कौन सा index use हो रहा है और कौन सा नहीं।
  4. 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 करें।


हमारे अन्य आर्टिकल

Add a Comment

Your email address will not be published. Required fields are marked *