ルート用と空港用の 2 つのテーブルがあります。
Routes には 9000 を超える行が含まれており、すべての列にインデックスを付けました。空港はわずか 2000 行で、すべての列にインデックスを付けました。
このクエリを実行すると、300 行を返すのに最大 35 秒かかる場合があります。
SELECT routes.* , a1.name as origin_name, a2.name as destination_name FROM routes
LEFT JOIN airports a1 ON a1.IATA = routes.origin
LEFT JOIN airports a2 ON a2.IATA = routes.destination
WHERE routes_build.carrier = "Carrier Name"
「DESCRIBE」で実行すると、次の情報が得られますが、それが何を言っているのか100%確信が持てません。
id | Select Type | Table | Type | possible_keys | Key | Key_len | ref | rows | Extra
--------------------------------------------------------------------------------------------------------------------------------------
1 | SIMPLE | routes_build | ref | carrier,carrier_2 | carrier | 678 | const | 26 | Using where
--------------------------------------------------------------------------------------------------------------------------------------
1 | SIMPLE | a1 | ALL | NULL | NULL | NULL | NULL | 5389 |
--------------------------------------------------------------------------------------------------------------------------------------
1 | SIMPLE | a2 | ALL | NULL | NULL | NULL | NULL | 5389 |
--------------------------------------------------------------------------------------------------------------------------------------
私が考えることができる唯一の代替手段は、2 つの個別のクエリを実行し、それらを PHP で結合することですが、このようなものが mysql サーバーを停止させる可能性があるとは信じられません。いつものように、私は何か愚かなことをしていると思います。SQL は私の最大の弱点です。