我有以下表格
awarded_companies
, tenders
, grants
.
有2个多对多关系
-
awarded_companies <-> tenders
-
awarded_companies <-> grants
我想列出属于招标的所有中标公司。
所以查询看起来像这样:
SELECT awarded_companies.*
FROM awarded_companies
JOIN awarded_company_tenders ON (awarded_company_tenders.awarded_company_id = awarded_companies.id)
GROUP BY awarded_companies.id
实际上我有很多记录,需要对结果进行分页。当我尝试计算所有 awarded_companies
属于 tender
查询需要 30 秒。
这里有两种计算行数的方法和 EXPLAIN EXTENDED
的一些基准:
我唯一能想到的就是在 awarded_companies
中添加 2 个标志- 判断公司是否属于tender
其次判断公司是否属于grant
.
这样我就可以删除 join
和 group by
查询将如下所示:
SELECT * FROM awarded_companies WHERE has_tender=1
谁能帮我解决这个问题?
最佳答案
SELECT 计数 (awarded_companies.id) 来自 awarded_companies 加入 awarded_company_tenders ON (awarded_company_tenders.awarded_company_id = awarded_companies.id) GROUP BY awarded_companies.id
关于带组的mysql计数运行速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35614272/