作者:阿里西西  文章来源:http://www.alixixi.com/  更新时间:2005-12-15
需要从数据库的某个表中随机地取出 1 行数据或者多行数据,比如在网站首页的有个小板块随机显示 10 篇文章,可以用这个 SQL 语句:
SELECT * FROM doc_content ORDER BY rand( ) LIMIT 10;

不知道数据量比较大时的效率如何。

更新:今天看到这篇里有大数据量时取随机数据的 SQL 语句,比直接用 RAND() 的效率高:

SELECT *
FROM doc_content AS r1 JOIN
(SELECT ROUND(RAND() *
(SELECT MAX(doc_id)
FROM doc_content)) AS doc_id)
AS r2
WHERE r1.doc_id >= r2.doc_id
ORDER BY r1.doc_id ASC
LIMIT 1;
由于有子查询,需要 MySQL 4.1以后的版本。下面是它的效率测试:

 

      
  • Q1. 直接使用 ORDER BY RAND()   
  • Q3. 使用 RAND() * MAX(ID) + ORDER BY ID
可以看到大于 1000 行以后的差别就显现出来了:
  100    1.000   10.000   100.000  1.000.000
Q1 0:00.718s 0:02.092s 0:18.684s 2:59.081s 58:20.000s
Q3 0:00.570s 0:00.607s 0:00.614s 0:00.628s  0:00.637s
  • 上一篇:
  • 下一篇:
网友评论
相关搜索
阿里西西Baidu.com搜索