MySQL 5.7 vs MariaDB 10.10

MariaDB は MySQL 互換の RDBMS と言われますが、副問い合わせの性能が両者で異なるようです。

特に、IN 節が入れ子になっているような SQL の処理で違いが見られます。

CREATE TABLE tbl1 (id PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255));
CREATE TABLE tbl2 (id PRIMARY KEY AUTO_INCREMENT, tbl1_id INTEGER, name VARCHAR(255), index i_tbl1 (tbl1_id));
CREATE TABLE tbl3 (id PRIMARY KEY AUTO_INCREMENT, tbl2_id INTEGER, name VARCHAR(255), index i_tbl2 (tbl2_id));

として、

SELECT * FROM tbl1 WHERE id IN (SELECT tbl1_id FROM tbl2 WHERE id IN (SELECT tbl2_id FROM tbl3 WHERE id=1));

というようなクエリを発行すると、実行時間に違いが見られます。EXPLAIN をつけて実行計画を見ると、両者共同じような計画を作成しますが、SET profiling=1 として SHOW PROFILE を見ると、MySQL の方がより多くのパスを通っていることがわかります。例では2つのネストなのであまり差は出ませんが、ネストを深くするほど差が大きくなります。

MySQL は折角作成した INDEX を使っていないような感じです。

MySQL 8.0 からは実行計画がそもそも異なっていてより効率的な検索が行われるようです。MariaDB 11.0 の方はまだ詳細を見ていませんが、同じように最適化に重点を置いているようです。

まだまだ RDBMS の進化は続くようです。

投稿者について
みのしす

小さいときは科学者になろうとしたのに、その時にたまたま身に着けたプログラミングで未だに飯を食っているしがないおじさんです。(年齢的にはもうすぐおじいさん)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です