2017-04-07 16 views
0

単純なクエリ:5.3秒:単純なクエリ:mysqlの - 非常に遅い、mariadb - 良好なパフォーマンス

select * 
from data.staff AS staff 
left join data.contact AS workphones on staff.id = workphones.staff_with_work_phone_id 

MySQLは時間を実行します。
MariaDb実行時間:0.016秒。

連絡先は約50000行です。
スタッフの行数は約600です。

理由は何ですか?
mysqlで同じ結果を得ることは可能ですか?

ありがとうございます!

のMySQL(v5.7.14)を説明:

+----+-------------+------------+------------+------+--------------------------------+------+---------+------+-------+----------+---------------------------------------+ 
| id | select_type | table  | partitions | type | possible_keys     | key | key_len | ref | rows | filtered | Extra         | 
+----+-------------+------------+------------+------+--------------------------------+------+---------+------+-------+----------+---------------------------------------+ 
| 1 | SIMPLE  | staff  | NULL  | ALL | NULL       | NULL | NULL | NULL | 606 | 100.00 | NULL         | 
+----+-------------+------------+------------+------+--------------------------------+------+---------+------+-------+----------+---------------------------------------+ 
| 2 | SIMPLE  | workphones | NULL  | ALL | FK_2f7824065c2c4b0fbe5c00da271 | NULL | NULL | NULL | 49180 | 100.00 | Using where.       | 
| |    |   |   |  |        |  |   |  |  |   | Using join buffer (Block Nested Loop) | 
+----+-------------+------------+------------+------+--------------------------------+------+---------+------+-------+----------+---------------------------------------+ 

はMariaDB(v10.0.28)説明:検証条件の残り

+----+-------------+------------+------+--------------------------------+--------------------------------+---------+--------------------+-------+----------+-------+ 
| id | select_type | table  | type | possible_keys     | key       | key_len | ref    | rows | filtered | Extra | 
+----+-------------+------------+------+--------------------------------+--------------------------------+---------+--------------------+-------+----------+-------+ 
| 1 | SIMPLE  | staff  | ALL |        |        |   |     | 602 | 100.00 |  | 
+----+-------------+------------+------+--------------------------------+--------------------------------+---------+--------------------+-------+----------+-------+ 
| 2 | SIMPLE  | workphones | ALL | FK_1249f6bc1d68495090691f3ce02 | FK_1249f6bc1d68495090691f3ce02 | 9  | user_data.staff.id | 25476 | 100.00 |  | 
+----+-------------+------------+------+--------------------------------+--------------------------------+---------+--------------------+-------+----------+-------+ 

は同一です。 試験は何度も実施された。

+1

これらのデータベースのどのバージョンですか?彼らはどちらも正しく調整されていますか?同じハードウェアですか?キャッシュがウォーミングされたことを確認するためにテストを複数回実行しましたか?サーバーはどちらもアイドル状態ですか? – tadman

+0

両方のサーバーのクエリから** EXPLAIN **を表示 –

+0

私は必要な情報を追加しました。 – Vladimir

答えて

1

あなたの2つのクエリプランは、MySQLが遅い理由を示しています。 どちらも可能なキーを検索します。これは外部キーです。

MariaDBはFKを使用します。FK_1249f6bc1d68495090691f3ce02は、MySQLがFKを見ていたが、それを使用していない行のpossible_keyskeys 2.

両方の列です。 MySQLはそれがEXTRAテーブル内のバッファ(ブロックネステッド・ループ)

に参加使用

を使用すること、を示しています。

MySQLはあなたの外部キーを使用しません。

外部キー結合 両方のデータベースシステムで外部キーのインデックスを持っていますか? MariaDBだけがそれを持っていれば、MySQLを非難することはできません。なぜなら、MySQLはそれを使用することができないからです。

関連する問題