Ale*_*rut 4 mysql sql sql-order-by
我有一张超过100万条记录的表格.问题是查询需要花费太多时间,比如5分钟."ORDER BY"是我的问题,但我需要查询顺序中的表达式才能获得最受欢迎的视频.而且由于表达式我无法在其上创建索引.
我该如何解决这个问题?
谢谢.
SELECT DISTINCT
`v`.`id`,`v`.`url`, `v`.`title`, `v`.`hits`, `v`.`created`, ROUND((r.likes*100)/(r.likes+r.dislikes),0) AS `vote`
FROM
`videos` AS `v`
INNER JOIN
`votes` AS `r` ON v.id = r.id_video
ORDER BY
(v.hits+((r.likes-r.dislikes)*(r.likes-r.dislikes))/2*v.hits)/DATEDIFF(NOW(),v.created) DESC
Run Code Online (Sandbox Code Playgroud)
是否每次都要计算最受欢迎的?我怀疑答案是肯定的.无论查询效率如何,某些操作都需要很长时间才能运行.
另外请记住,你现在有100万,未来几个月你可能有1000万.因此,查询可能现在可以正常工作但不是一个月,解决方案需要可扩展.
我会做一个工作,每隔几个小时运行一次,计算并将这些信息存储在另一张桌子上.这可能不是您正在寻找的答案,但我不得不说出来.