我一直在使用Django Rest Framework,ORM的一部分将以下查询作为通用对象列表端点的一部分进行:
start = Date.parse(params[:startDate])
end = Date.parse(params[:endDate])
price = @vehicle.cost * (end - start).to_i
API应该只显示包含设置为可查看曲目的专辑,但是如果跟踪表包含5000万行,则查询似乎永远不会完成,并挂起端点的执行。
引用的所有列都是索引的,所以我不知道为什么执行这么长时间。如果有任何可能的优化我可能没有考虑过,请告诉我。
答案 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)
上的索引将是一个很大的帮助。