Có sự khác biệt nào giữa kế hoạch thực hiện truy vấn MySQL và MariaDB không?Sự khác biệt giữa kế hoạch thực hiện truy vấn MySQL và MariaDB
Nếu có, cái nào tốt hơn?
CREATE TABLE `Table1` (
`ID` int(11) NOT NULL,
KEY `ID` (`ID`)
);
CREATE TABLE `Table2` (
`ID` int(11) NOT NULL,
KEY `ID` (`ID`)
);
CREATE TABLE `Table3` (
`ID` int(11) NOT NULL,
PRIMARY KEY (`ID`)
);
Trong Maria DB,
MariaDB [truepay_psr]> explain select T1.ID FROM Table1 T1 LEFT JOIN (SELECT T1.ID FROM Table3 T1 LEFT JOIN Table2 T2 ON T1.ID = T2.ID WHERE T2.ID IS NULL) T2 ON T1.ID=T2.ID WHERE T2.ID IS NULL;
+------+-------------+-------+--------+---------------+---------+---------+-------------------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-------+--------+---------------+---------+---------+-------------------+------+--------------------------+
| 1 | SIMPLE | T1 | index | NULL | ID | 4 | NULL | 1 | Using index |
| 1 | SIMPLE | T1 | eq_ref | PRIMARY | PRIMARY | 4 | truepay_psr.T1.ID | 1 | Using where; Using index |
| 1 | SIMPLE | T2 | ref | ID | ID | 4 | truepay_psr.T1.ID | 1 | Using where; Using index |
+------+-------------+-------+--------+---------------+---------+---------+-------------------+------+--------------------------+
3 rows in set (0.01 sec)
Trong MySQL,
mysql> explain select T1.ID FROM Table1 T1 LEFT JOIN (SELECT T1.ID FROM Table3 T1 LEFT JOIN Table2 T2 ON T1.ID = T2.ID WHERE T2.ID IS NULL) T2 ON T1.ID=T2.ID WHERE T2.ID IS NULL;
+----+-------------+------------+--------+---------------+---------+---------+------------+------+--------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+---------------+---------+---------+------------+------+--------------------------------------+
| 1 | PRIMARY | <derived2> | system | NULL | NULL | NULL | NULL | 0 | const row not found |
| 1 | PRIMARY | T1 | index | NULL | ID | 4 | NULL | 1 | Using index |
| 2 | DERIVED | T1 | index | NULL | PRIMARY | 4 | NULL | 1 | Using index |
| 2 | DERIVED | T2 | ref | ID | ID | 4 | test.T1.ID | 1 | Using where; Using index; Not exists |
+----+-------------+------------+--------+---------------+---------+---------+------------+------+--------------------------------------+
4 rows in set (0.00 sec)
Kết quả mang lại kết quả chính xác sẽ tốt hơn. Nếu không, bằng cách sử dụng các bảng đơn giản ngớ ngẩn này với hầu như không có dữ liệu chỉ đơn giản là vô dụng như phương pháp thử nghiệm. –