MySQL과 MariaDB 쿼리 실행 계획의 차이점
MySQL과 MariaDB Query 실행계획의 차이가 있습니까?
만약 그렇다면 어떤 것이 더 좋습니까?
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`)
);
마리아 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)
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)
"테이블 제거" 최적화의 효과를 볼 수 있습니다(MySQL Plan에는 4개의 행이 있고 MariaDB에는 3개만 있습니다)."할 일이 적기 때문에" MariaDB 계획이 더 나을 것입니다.하지만 둘 다 같은 결과를 반환해야 합니다.
이 기능에 대해서는, 이하에 자세하게 설명합니다.
http://s.petrunia.net/blog/?p=58
또, 이하와 같이 됩니다.
MariaDB가 MySQL과 동일한 계획을 사용하도록 하려면 다음과 같은 방법으로 테이블 제거 최적화를 비활성화하면 됩니다.
SET optimizer_switch='table_elimination=off';
언급URL : https://stackoverflow.com/questions/23243852/difference-between-mysql-and-mariadb-query-execution-plan
'programing' 카테고리의 다른 글
PDO 버전 Atribut은 어디에서 유래합니까? (0) | 2022.09.24 |
---|---|
여러 개의 하위 행을 하나의 행 MYSQL로 결합 (0) | 2022.09.24 |
fragment를 액티비티 그룹 내의 다른 fragment로 대체 (0) | 2022.09.24 |
방금 실행한 mysql 문을 취소하려면 어떻게 해야 하나요? (0) | 2022.09.24 |
numpy 배열에서 가장 가까운 값 찾기 (0) | 2022.09.24 |