2014-04-23 10 views
6

के बीच अंतर MySQL और MariaDB क्वेरी निष्पादन योजना के बीच कोई अंतर है?MySQL और MariaDB क्वेरी निष्पादन योजना

यदि हां, तो कौन सा बेहतर है?

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`) 
); 

मारिया डीबी में,

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) 
+1

जो सही परिणाम उत्पन्न करता है वह बेहतर होता है। अन्यथा, इन मूर्खतापूर्ण सरल तालिकाओं का उपयोग लगभग किसी भी डेटा के साथ परीक्षण विधि के रूप में केवल सादा बेकार है। –

उत्तर

2

आप "टेबल उन्मूलन" अनुकूलन (MySQL योजना का प्रभाव 4 पंक्तियों MariaDB एक है, जबकि है देख रहे हैं केवल 3)। मारिया डीबी योजना बेहतर होनी चाहिए क्योंकि "करने के लिए कम काम" है। हालांकि दोनों को एक ही परिणाम वापस करना चाहिए।

http://s.petrunia.net/blog/?p=58

और यहाँ:

सुविधा यहां विस्तार से समझाया गया है

https://mariadb.com/kb/en/mariadb/documentation/optimization-and-tuning/query-optimizations/table-elimination/

आप MariaDB एक ही योजना MySQL के रूप में आप को अक्षम करके इस लागू कर सकते हैं उपयोग करना चाहते हैं तालिका उन्मूलन अनुकूलन के साथ:

SET optimizer_switch='table_elimination=off'; 
संबंधित मुद्दे