SQL计数优化

时间:2018-03-16 01:41:19

标签: python mysql django

我一直在使用Django Rest Framework,ORM的一部分将以下查询作为通用对象列表端点的一部分进行:

start = Date.parse(params[:startDate])
end = Date.parse(params[:endDate])
price = @vehicle.cost * (end - start).to_i

API应该只显示包含设置为可查看曲目的专辑,但是如果跟踪表包含5000万行,则查询似乎永远不会完成,并挂起端点的执行。

引用的所有列都是索引的,所以我不知道为什么执行这么长时间。如果有任何可能的优化我可能没有考虑过,请告诉我。

1 个答案:

答案 0 :(得分:2)

对于此查询:

SELECT COUNT(*) AS `__count`
FROM `album` INNER JOIN 
     `tracks`
     ON (`album`.`id` = `tracks`.`album_id`)
WHERE `tracks`.`viewable` = 1`;

tracks(viewable, album_id)album(id)上的索引会有所帮助。

但是,很可能不需要join,所以你可以这样做:

select count(*)
from tracks
where viewable = 1;

为此,tracks(viewable)上的索引将是一个很大的帮助。