MySQL ใช้ EXPLAIN แทน Sybase ASE SHOWPLAN / SET SHOWPLAN ON
Sybase ASE ใช้ SET SHOWPLAN ON หรือ SHOWPLAN สำหรับดู Query Plan MySQL ใช้ EXPLAIN (หรือ EXPLAIN ANALYZE ใน 8.0+)
สร้างตาราง พร้อม Index
mysql> CREATE TABLE DemoTable1531 (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(20)
-> );
Query OK, 0 rows affected (2.92 sec)
mysql> CREATE INDEX Name_index1 ON DemoTable1531(StudentName);
Query OK, 0 rows affected (0.99 sec)
เพิ่มข้อมูล
mysql> INSERT INTO DemoTable1531(StudentName) VALUES
-> ('Chris'), ('Robert'), ('David'), ('Mike'), ('Carol');
Query OK, 5 rows affected
คำสั่ง EXPLAIN
mysql> EXPLAIN SELECT * FROM DemoTable1531 WHERE StudentName = 'Mike';
ผลลัพธ์ EXPLAIN
+----+-------------+---------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| 1 | SIMPLE | DemoTable1531 | NULL | ref | Name_index1 | Name_index1 | 63 | const | 1 | 100.00 | Using index |
+----+-------------+---------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
การตีความ
type: ref - ใช้ Non-unique Index Lookup (ดี)
key: Name_index1 - ใช้ Index ที่สร้างไว้
rows: 1 - คาดว่าอ่าน 1 แถว
Extra: Using index - Covering Index (SELECT * แต่ Index มีทุกคอลัมน์ที่ต้องการ)
MySQL EXPLAIN Formats
| Format | คำสั่ง | คุณสมบัติ |
| Traditional | EXPLAIN SELECT ... | ตาราง ASCII, Readable |
| JSON | EXPLAIN FORMAT=JSON SELECT ... | รายละเอียดมาก, Machine-readable |
| TREE (8.0.16+) | EXPLAIN FORMAT=TREE SELECT ... | Tree Structure, 易读 |
| ANALYZE (8.0.18+) | EXPLAIN ANALYZE SELECT ... | รันจริง + วัดเวลา + Actual Rows |
Sybase ASE vs MySQL คำสั่งเทียบเท่า
| Sybase ASE | MySQL | คำอธิบาย |
SET SHOWPLAN ON | EXPLAIN | ดู Query Plan |
SET STATISTICS IO ON | EXPLAIN ANALYZE / SET profiling=1 | ดู I/O Stats |
sp_helpindex | SHOW INDEX FROM table | ดู Index |
UPDATE STATISTICS | ANALYZE TABLE | อัปเดต Statistics |