结果表:(pk=id)
统计表:(pk=id,外键=test\u id)
我的问题:
SELECT *
FROM (
(SELECT *
FROM results
WHERE job_id=2000) AS res
LEFT JOIN
(SELECT *
FROM STATISTICS
WHERE RESULT='FAILED') AS stat ON res.id=stat.results_id BETWEEN X AND Y)
results.idMap到statistics.test\u id。在x和y处,我想使用alias表中的min和max id值 res
(即第一行和最后一行的ID job_id=2000
. 原因是统计数据包含非常多的行,因为结果中的每一行对应多个行,但我只关心与子集中的测试对应的那些行 job_id=2000
. 上面的查询在没有between语句的情况下工作,但是由于尝试连接统计信息的全部内容,而实际应用的行只有一小部分(如果我硬编码x和y,查询时间是~120秒,而不是~2秒),因此变得非常慢。
有没有办法从alias表中获取x和y值并在between语句中使用?
2条答案
按热度按时间zengzsys1#
如果要提高性能,请不要使用子查询:
为了提高性能,您需要索引:
results(job_id, id)
(尽管results(job_id)
(已足够)statistics(results_id, result)
(尽管statistics(results_id)
(已足够)vc9ivgsu2#
可以按如下方式使用聚合函数: