2010-08-09 112 views
2

MySQL什么是选择X随机条目(而不只是一个) - 优化大量使用,即在域的主页上。MySQL选择随机X条目 - 优化

据说只是盲目地使用MySQL rand()会让这个对于大型数据库来说非常可怕 - 请给我一个比这更好的优化答案!

回答

2

溶液是使用PHP

看看在这篇文章中选择的解决方案编号3更快

http://akinas.com/pages/en/blog/mysql_random_row/

解决方案3 [PHP]

$offset_result = mysql_query(" SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` "); 
$offset_row = mysql_fetch_object($offset_result); 
$offset = $offset_row->offset; 
$result = mysql_query(" SELECT * FROM `table` LIMIT $offset, 1 ") 

的 解决方案4 [SQL](Second in fast)

SELECT * FROM `table` WHERE id >= (SELECT FLOOR(MAX(id) * RAND()) FROM `table`) ORDER BY id LIMIT 1; 
+0

这很快但并非真正随机 - 只有第一个值是随机的。 – burnall 2010-08-09 05:44:57

+0

它得到一个随机结果,如果你想更多你可以循环它 – 2010-08-09 05:52:00

+1

尝试第四MySQL解决方案在上面的链接 - 似乎随机ish – ina 2010-08-09 07:21:33

0

我对ID有问题。该ID是自动生成的,但最小的ID相对于总记录数非常大。所以我做了一些改动,使查询更加随机化,但稍微慢一点。

SELECT * FROM 'table' WHERE id >= (SELECT (FLOOR(MAX(id) * RAND()) + MIN(id)) FROM 'table') ORDER BY id LIMIT 10