2010-10-25 58 views
0

我有一个jquery滚轮/滚轮,显示从我的'有用的提示'数据库表查询返回的记录片段。我想保持滚动条大约15条记录,但并不总是前15条记录。帮助从MySQL查询中获取或显示ColdFusion中的随机记录?

是不是更有效地写出这样的查询:

SELECT * 
FROM table 
ORDER BY RAND() 
LIMIT n 

它返回一个随机结果还是我返回整个查询,并有我的ColdFusion组件起到了查询结果的随机数?

我的滚动条的未来将包括我'销售商品'表中的随机记录,所以我需要牢记这一点。

回答

4

我同意bemace返回的值不会被用于Coldfusion的大型结果集是浪费资源,永远无法收回。

但要小心使用MySQL's RAND() function for ordering - once you're over 100,000 records, it doesn't scale wellsee graph),你应该look at using alternatives

+0

所以,我从链接看了你的其他帖子。你能帮我理解为什么这种方式更高效吗?并且,谢谢。这只是我正在寻找的答案。我真的想要解决长期的可扩展性问题。 – Ofeargall 2010-10-25 16:31:36

+0

无视,第一个链接中的精彩文章很好地解释了它。我很抱歉。 – Ofeargall 2010-10-25 16:35:43

+0

关于缩放问题的好文章@OMG小马。 +1 – Leigh 2010-10-25 16:47:03

1

返回整个结果集并将它们大部分扔出去肯定会效率较低。

从包含其他表中的数据的角度来看,您可以运行另一个类似于您获得的查询,然后在ColdFusion中将结果一起混洗。

为了完整起见,这样的事情是可能的,但太慢而实用:

(SELECT * FROM table1) 
UNION 
(SELECT * FROM table2) 
ORDER BY RAND() 
LIMIT 30 
1

除非你是缓存相对较小和静态查询,它通常是更有效的随机记录在数据库方面。这样你每次只能拉出15条记录,而不是表中的所有记录。