MySQL में EXPLAIN कमांड: ORDER BY क्वेरी के निष्पादन योजना का विश्लेषण
EXPLAIN कमांड MySQL क्वेरी ऑप्टिमाइज़र की निष्पादन योजना दिखाता है, जिससे आप समझ सकते हैं कि ORDER BY कैसे निष्पादित होगा और क्या इंडेक्स उपयोग होगा।
उदाहरण के साथ पूर्ण प्रदर्शन
टेबल बनाना
mysql> CREATE TABLE DemoTable606 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100)
);
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable606(FirstName) VALUES('John'), ('Robert'), ('Chris'), ('David');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable606;
आउटपुट:
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1 | John |
| 2 | Robert |
| 3 | Chris |
| 4 | David |
+----+-----------+
4 rows in set (0.00 sec)
EXPLAIN विश्लेषण: तीन परिदृश्य
1. PRIMARY KEY पर ORDER BY (इंडेक्स उपयोग)
mysql> EXPLAIN SELECT * FROM DemoTable606 ORDER BY Id;
आउटपुट:
+----+-------------+--------------+------------+-------+---------------+---------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------------+------------+-------+---------------+---------+---------+------+------+----------+-------+
| 1 | SIMPLE | DemoTable606 | NULL | index | NULL | PRIMARY | 4 | NULL | 4 | 100.00 | NULL |
+----+-------------+--------------+------------+-------+---------------+---------+---------+------+------+----------+-------+
विश्लेषण: type=index, key=PRIMARY, Extra=NULL - प्राइमरी की इंडेक्स का उपयोग करके क्रमबद्ध, कोई फाइलसॉर्ट नहीं। सबसे कुशल।
2. गैर-इंडेक्स कॉलम पर ORDER BY (फाइलसॉर्ट)
mysql> EXPLAIN SELECT * FROM DemoTable606 ORDER BY Id, FirstName;
आउटपुट:
+----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+----------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+----------------+
| 1 | SIMPLE | DemoTable606 | NULL | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | Using filesort |
+----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+----------------+
विश्लेषण: type=ALL (फुल टेबल स्कैन), Extra=Using filesort - इंडेक्स उपयोग नहीं, फाइलसॉर्ट आवश्यक। कम कुशल।
3. ORDER BY में RAND() (अस्थायी टेबल + फाइलसॉर्ट)
mysql> EXPLAIN SELECT * FROM DemoTable606 ORDER BY Id, RAND();
आउटपुट:
+----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
| 1 | SIMPLE | DemoTable606 | NULL | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | Using temporary; Using filesort |
+----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
विश्लेषण: Extra=Using temporary; Using filesort - अस्थायी टेबल बनती है, फिर फाइलसॉर्ट। सबसे कम कुशल।
EXPLAIN कॉलम व्याख्या
| कॉलम | अर्थ |
|---|---|
| type | जॉइन प्रकार: system > const > eq_ref > ref > range > index > ALL |
| key | वास्तव में उपयोग किया गया इंडेक्स |
| key_len | इंडेक्स की लंबाई (बाइट्स में) |
| rows | अनुमानित पंक्तियाँ जांची जाएंगी |
| Extra | अतिरिक्त जानकारी: Using filesort, Using temporary, Using index, आदि |
प्रदर्शन अनुकूलन टिप्स
- ORDER BY कॉलम पर इंडेक्स बनाएं
- WHERE और ORDER BY कॉलम को कवर करने वाला कम्पोजिट इंडेक्स बनाएं
- बड़े डेटासेट पर ORDER BY RAND() से बचें
- LIMIT के साथ ORDER BY उपयोग करें ताकि फाइलसॉर्ट छोटा हो