0

私はこの単純なJOINを持っています:

SELECT my_table1.*,  
       TIME_FORMAT(time1, '%H:%i') AS time1,
       TIME_FORMAT(time2, '%H:%i') AS time2,
       TIME_FORMAT(time3, '%H:%i') AS time3,
       my_table2.*, 
       TIME_FORMAT(time2_saved, '%H:%i') AS time2_saved,
       TIME_FORMAT(time3_saved, '%H:%i') AS time3_saved,
       my_table3.device_id, my_table3.device_token,
       my_table3.device_language, my_table3.app_edition 
  FROM my_table1, my_table2, my_table3
 WHERE my_table1.flight_id = mytable_2.flight_id 
   AND my_table2.device_id = my_table3.device_id AND my_table3.app_edition = '1'

MySQL が報告しているように、これは効率が悪いようです。このクエリでは、インデックスが明らかに最適ではありません。ただし、すべてのテーブルにはインデックスがありますが、何かが欠けています。

クエリの前に EXPLAIN を実行すると、MySQL は次を返します。

1
SIMPLE
my_table2
ALL
flight_id,device_id
NULL
NULL
NULL
356

1
SIMPLE
my_table3
eq_ref
device_id
device_id
128
my_databasename.my_table2.device_id
1
Using where

1
SIMPLE
my_table1
ref
flight_id
flight_id
99
my_databasename.my_table2.flight_id
1
Using where

(きれいな表を見たい場合は、ここで実際のスクリーンショットを確認してください: http://oi48.tinypic.com/20kov3d.jpg )

ご覧のとおり、最初の行には「ALL」タイプが表示されます。これは、完全なテーブル スキャンを使用することを意味します。ここで何が欠けていますか?

4

1 に答える 1