我对 MySQL 相当陌生,我正在尝试使用以下语句选择一组不同的行:
SELECT DISTINCT sp.atcoCode, sp.name, sp.longitude, sp.latitude
FROM `transportdata`.stoppoints as sp
INNER JOIN `vehicledata`.gtfsstop_times as st ON sp.atcoCode = st.fk_atco_code
INNER JOIN `vehicledata`.gtfstrips as trip ON st.trip_id = trip.trip_id
INNER JOIN `vehicledata`.gtfsroutes as route ON trip.route_id = route.route_id
INNER JOIN `vehicledata`.gtfsagencys as agency ON route.agency_id = agency.agency_id
WHERE agency.agency_id IN (1,2,3,4);
但是,select 语句大约需要 10 分钟,所以显然有些事情正在进行中。
一个重要的因素是这张桌子gtfsstop_times
很大。(约 2.5 亿条记录)
索引似乎设置正确;以上所有连接都使用索引列。表大小大致为:
gtfsagencys - 4 rows
gtfsroutes - 56,000 rows
gtfstrips - 5,500,000 rows
gtfsstop_times - 250,000,000 rows
`transportdata`.stoppoints - 400,000 rows
服务器有 22Gb 的内存,我将 InnoDB 缓冲池设置为 8G,我使用的是 MySQL 5.6。
任何人都可以看到让这个运行更快的方法吗?或者实际上,根本没有!
stoppoints 表在不同的模式中是否重要?
编辑: EXPLAIN SELECT... 返回: