我有一个jquery滚轴/滚动条,显示从我的'有用提示'数据库表查询返回的记录片段。我想将卷轴保持在大约15条记录中,但不总是前15条记录。
编写如下查询更有效:
SELECT *
FROM table
ORDER BY RAND()
LIMIT n
哪个返回一个随机结果,还是返回整个查询并让我的ColdFusion组件提供一个随机数的查询结果?
我的卷轴的未来将包括我的“待售商品”表中的随机记录,因此我需要牢记这一点。
答案 0 :(得分:4)
我同意bemace,返回一大堆不会用于Coldfusion的结果值是浪费资源,永远无法收回。
但要谨慎使用MySQL's RAND() function for ordering - once you're over 100,000 records, it doesn't scale well(see graph),你应该look at using alternatives。
答案 1 :(得分:1)
返回整个结果集并且将大部分结果丢弃肯定会降低效率。
当你到达包含来自其他表的数据时,你可以运行另一个查询,就像你得到的那样,然后在ColdFusion中将结果一起洗牌。
为了完整起见,这样的事情是可能的,虽然太慢而不实用:
( SELECT * FROM table1 )
UNION
( SELECT * FROM table2 )
ORDER BY RAND()
LIMIT 30
答案 2 :(得分:1)
除非您缓存相对较小且静态的查询,否则在数据库端随机化记录通常更有效。这样你每次只记录15条记录,而不是表中的所有记录。