SQL ORDER BY性能

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)

Ali*_*tad 9

是否每次都要计算最受欢迎的?我怀疑答案是肯定的.无论查询效率如何,某些操作都需要很长时间才能运行.

另外请记住,你现在有100万,未来几个月你可能有1000万.因此,查询可能现在可以正常工作但不是一个月,解决方案需要可扩展.

我会做一个工作,每隔几个小时运行一次,计算并将这些信息存储在另一张桌子上.这可能不是您正在寻找的答案,但我不得不说出来.

  • +1:由基本上返回一个随机值(位置之前排序都有排序后零关系位置)始终将是昂贵的计算订购一万个结果.最好的办法是使用一些批处理,触发器或其他方法来预先计算这个值.然后,您可以获得计算值的索引. (3认同)