我有一个名为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注意:一辆车可能有多个车牌,我想数一下最新的板块类型。
样本数据:

发布于 2016-12-25 10:17:50
有时,内部联接比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` DESChttps://stackoverflow.com/questions/41320081
复制相似问题