我一直在尝试优化从数据库中检索数据的方式,以便在“仪表板”类型的页面上显示以进行软件开发
我的数据库结构如下:
我想查询这两个表,为我提供一个结果集,其中包含单个查询中每个DEV任务窗口的DEV Complete,Test Complete和Release Complete要求的编号。我目前正在执行多个查询,每个查询都包含子查询,然后使用PHP聚合结果,但这总共需要15秒才能执行,任何人都可以帮我将其合并为一个查询>
答案 0 :(得分:11)
SELECT r.REQ_ID,
SUM(CASE WHEN t.TASK_NAME = 'DEV' THEN 1 ELSE 0 END) AS DevComplete,
SUM(CASE WHEN t.TASK_NAME = 'TEST' THEN 1 ELSE 0 END) AS TestComplete,
SUM(CASE WHEN t.TASK_NAME = 'RELEASE' THEN 1 ELSE 0 END) AS ReleaseComplete
FROM Requirements r
INNER JOIN Tasks t
ON r.REQ_ID = t.REQ_ID
WHERE t.TASK_STATUS = 'Complete'
GROUP BY r.REQ_ID
答案 1 :(得分:0)
我意识到这是一个老问题,但我用以下模式进行了测试:
模式1:
SELECT
[Count1] = SUM(CASE WHEN ... THEN 1 ELSE 0 END),
[Count2] = SUM(CASE WHEN ... THEN 1 ELSE 0 END)
FROM
[Table]
GROUP BY
[Field]
模式2:
SELECT
[COUNT1] = (SELECT COUNT(*) FROM [Table] WHERE ...),
[Count2] = (SELECT COUNT(*) FROM [Table] WHERE ...)
就我而言,在运行两个查询时,模式2占用了36%的时间,模式1占用了64%。对我来说,模式1看起来更优雅,但在我的场景中它的表现几乎没有。