7

我有一个foo用这些字段调用的表:

- id

- type

- parentId

我想选择一个父IDS列表,按照COUNT(*)它们在表中出现次数的降序排列。像这样的东西:

SELECT DISTINCT parentId FROM `foo` 
ORDER BY (COUNT(parentId) DESC where parentId = parentId)

如何以最有效的方式完成这项工作,并在服务器上施加最少的负载?

表中可能有成千上万条记录,因此手动浏览每条记录是不可接受的。

4

2 回答 2

15

只需应用一个GROUP BY子句,并假设您有一个 index 、FOREIGN KEYPRIMARY KEYon parentId,性能应该会非常好。(parentId看起来很可能是 a FORIEGN KEY,所以一定要定义约束来强制索引)。

SELECT `parentId`
FROM `foo`
GROUP BY `parentId`
ORDER BY COUNT(*) DESC
于 2013-01-10T20:34:21.113 回答
1

如何以最有效的方式完成这项工作,并在服务器上施加最少的负载?

关键是最有效的方法

肯定不是 Count(),但最有效的是......读取一个字段,您正在存储 Count 结果。您可以使用触发器或插入后更新它。

尤其是当

表中可能有成千上万条记录

于 2013-01-10T20:36:34.630 回答