我有一个名为 vehicle_plate 的表,如下所示:
上面的表总记录是715210,我想按特定区域和省份的最新或更新的车牌类型统计车辆,但是当我运行下面的查询时,查询速度非常快慢的。我的意思是我从来没有得到它刚刚加载的结果。
SELECT `pt`.`pt_dr` AS
TYPE , COUNT( DISTINCT vp.vehicle_v_id ) AS vehicles, `p`.`province_dr` AS province_name, `p`.`id` AS id, vp.vehicle_v_id
FROM (
`vehicle_plate` AS vp
)
LEFT JOIN provinces AS p ON p.id = vp.provinces_province_id
LEFT JOIN plate_types AS pt ON pt.id = vp.plate_types_pt_id
WHERE 1
AND p.zone_zone_id = '1'
AND p.id = '1'
AND vp.id
IN (
SELECT vp1.id
FROM vehicle_plate AS vp1
GROUP BY vp1.vehicle_v_id
)
GROUP BY vp.vehicle_v_id, `vp`.`plate_types_pt_id`
ORDER BY `p`.`zone_zone_id` , `vp`.`provinces_province_id` , `vehicles` DESC
注意:一辆车可能有多个车牌,我想统计更新或最新的车牌类型。
最佳答案
有时内部联接比 in 子句性能更高
SELECT `pt`.`pt_dr` AS
TYPE , COUNT( DISTINCT vp.vehicle_v_id ) AS vehicles, `p`.`province_dr` AS province_name, `p`.`id` AS id, vp.vehicle_v_id
FROM (
`vehicle_plate` AS vp
)
LEFT JOIN provinces AS p ON p.id = vp.provinces_province_id
LEFT JOIN plate_types AS pt ON pt.id = vp.plate_types_pt_id
INNER JOIN (
SELECT vp1.id as id
FROM vehicle_plate AS vp1
GROUP BY vp1.vehicle_v_id
) t on vp.id = t.id
WHERE 1
AND p.zone_zone_id = '1'
AND p.id = '1'
GROUP BY vp.vehicle_v_id, `vp`.`plate_types_pt_id`
ORDER BY `p`.`zone_zone_id` , `vp`.`provinces_province_id` , `vehicles` DESC
关于Mysql嵌套查询速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41320081/