假设我有 2 张桌子。一个包含汽车制造商的名称及其 ID,第二个包含有关汽车型号的信息。我需要从第一个表中选择其中的几个,但按从第二个表数据链接的数量对它们进行排序。
目前,我的查询如下所示:
SELECT DISTINCT `manufacturers`.`name`,
`manufacturers`.`cars_link`,
`manufacturers`.`slug`
FROM `manufacturers`
JOIN `cars`
ON manufacturers.cars_link = cars.manufacturer
WHERE ( NOT ( `manufacturers`.`cars_link` IS NULL ) )
AND ( `cars`.`class` = 'sedan' )
ORDER BY (SELECT Count(*)
FROM `cars`
WHERE `manufacturers`.cars_link = `cars`.manufacturer) DESC
对于我的踏板车桌子来说,它工作得很好,尺寸只有几十 mb。但现在我需要为汽车表做同样的事情,它的大小只有几百兆字节。问题是查询需要很长时间,有时甚至会导致 nginx 超时。另外,我认为,我拥有所有必要的数据库索引。上面的查询有什么替代方法吗?