我有理由新MySQL和我想选择一组不同的使用此语句行:选择在MySQL DISTINCT语句正在10分钟
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 ...返回此:
如果您省略了“DISTINCT”限定符,该操作如何执行?当你在查询中使用EXPLAIN时,你会得到什么? –
解释计划是什么?将其粘贴到pastebin或要点中 –
我不确定我会如何测试,因为如果我省略了限定符,那么大约会返回2.5亿行。对不起,如果这看起来像废话,我有点新的测试/调试查询。 –