MySQL ve MariaDB Sorgu yürütme planı arasında fark var mı?MySQL ve MariaDB Sorgulama planı arasındaki fark
Evet, hangisi daha iyi? Maria DB ise
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`)
);
, MySQL
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)
,
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)
Doğru sonuçlar verenlerden biri daha iyidir. Aksi takdirde, neredeyse hiç veri olmadan bu aptalca basit tabloları kullanarak sadece test yöntemi olarak yararsızdır. –