我有一个 jquery 滚轮/滚轮,它显示从我的“有用提示”数据库表查询返回的记录片段。我想将滚动条保持在大约 15 条记录,但并不总是前 15 条记录。
编写如下查询是否更有效:
SELECT *
FROM table
ORDER BY RAND()
LIMIT n
哪个返回随机结果,或者我返回整个查询并让我的 ColdFusion 组件提供随机数的查询结果?
我的滚动条的未来也将包括我的“待售物品”表中的随机记录,所以我需要记住这一点。
我有一个 jquery 滚轮/滚轮,它显示从我的“有用提示”数据库表查询返回的记录片段。我想将滚动条保持在大约 15 条记录,但并不总是前 15 条记录。
编写如下查询是否更有效:
SELECT *
FROM table
ORDER BY RAND()
LIMIT n
哪个返回随机结果,或者我返回整个查询并让我的 ColdFusion 组件提供随机数的查询结果?
我的滚动条的未来也将包括我的“待售物品”表中的随机记录,所以我需要记住这一点。
我同意 bemace 的观点,即返回不会用于 Coldfusion 的大量结果集是一种永远无法收回的资源浪费。
但是在使用 MySQL 的 RAND() 函数进行排序时要小心——一旦超过 100,000 条记录,它就不能很好地扩展(见图表),你应该考虑使用替代方案。
返回整个结果集然后他们将大部分结果都扔掉肯定会降低效率。
当您需要包含来自其他表的数据时,您可以运行另一个查询,就像您已经拥有的查询一样,然后在 ColdFusion 中将结果混在一起。
为了完整起见,这样的事情是可能的,虽然太慢而不实用:
( SELECT * FROM table1 )
UNION
( SELECT * FROM table2 )
ORDER BY RAND()
LIMIT 30
除非您正在缓存一个相对较小的静态查询,否则在数据库端随机化记录通常更有效。这样你每次只提取 15 条记录,而不是表中的所有记录。