我有两张桌子,一张用于路线,一张用于机场。
Routes 包含刚刚超过 9000 行,我已经为每一列建立了索引。机场只有 2000 行,我也为每一列编制了索引。
当我运行此查询时,最多可能需要 35 秒才能返回 300 行:
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 |
--------------------------------------------------------------------------------------------------------------------------------------
我能想到的唯一选择是运行两个单独的查询并将它们与 PHP 连接起来,但我无法相信这样的事情会杀死 mysql 服务器。所以像往常一样,我怀疑我在做一些愚蠢的事情。SQL 是我的第一个弱点。