mySQL随机取数据的执行效率

昨晚我在编写“路过的”的应用随机取笑话的时候发现一个问题,我的目标是从笑话表(大约几万条数据量)中随机抽取一条笑话并显示,起初我的SQL如下:

Sql代码

select * from xiaohua limit 随机数,1

其中随机数是由java程序产生,当随机数比较小时,发现执行速度非常快,但当随机数如超过1w时,执行速度超慢,看来这条路是行不通了,于是我又利用mysql的rand()函数,看看执行效率,发现效率也不好,最后我通过google了一下,发现碰到这个问题的人还是很多的,最终的SQL如下(速度超过),可到http://l.faqee.com/的查看笑话看执行速度:

Sql代码

SELECT t1.id as id,title,content,class_name,class_id,hits FROM xiaohua AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM xiaohua )-(SELECT MIN(id) FROM xiaohua ))+(SELECT MIN(id) FROM xiaohua )) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 1;

备忘一下!

时间: 2025-01-21 14:32:20

mySQL随机取数据的执行效率的相关文章

mysql随机取数据的几种高效率方法

1]普通方法, 效率太低  代码如下 复制代码 SELECT * FROM table ORDER BY rand() LIMIT 10; [2] JOIN的方法:  代码如下 复制代码 SELECT * FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`) – (SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)) AS

MySQL 随机函数获取数据速度和效率分析_Mysql

在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的.下面我来介绍随机取数据一些优化方法. SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值. mysql> select RAND(); -> 0.

MySQL 随机查询数据与随机更新数据实现代码_Mysql

MySQL随机查询数据 以前在群里讨论过这个问题,比较的有意思.MySQLl的语法真好玩.他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.翻了手册,找到了下面这个语句,可以完成任务了. 复制代码 代码如下: SELECT * FROM table_name ORDER BY rand() LIMIT 5; MySQL的rand()函数在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值. 关于MySQL

ASP抽取数据的执行效率_应用技巧

通常从数据库中抽取数据记录,需要使用到SQL语句,查询获得相关记录集,然后从记录集中选择相关字段.相关记录行进行显示. 那么在抽取到显示的一系列列过程中,如果注意如下几个要点,则令抽取数据的执行效率大大增加. 1,明确抽取的字段名称 正常的SQL语句抽取记录是:Select * from [data_table] 即从数据表data_table中抽取所有字段的记录值. select * 语句的执行效率是很低的,因为在执行这样的语句的时候其实执行了两次查询,在执行select语句前,首先必须查询系

ASP抽取数据的执行效率

通常从数据库中抽取数据记录,需要使用到SQL语句,查询获得相关记录集,然后从记录集中选择相关字段.相关记录行进行显示. 那么在抽取到显示的一系列列过程中,如果注意如下几个要点,则令抽取数据的执行效率大大增加. 1,明确抽取的字段名称 正常的SQL语句抽取记录是: Select * from [data_table] 即从数据表data_table中抽取所有字段的记录值. select * 语句的执行效率是很低的,因为在执行这样的语句的时候其实执行了两次查询,在执行select语句前,首先必须查询

MySQL中rand函数随机取数据介绍

 代码如下 复制代码 SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值.  代码如下 复制代码 mysql> select RAND();         -> 0.5925 mysql> select RAND(20);         -> 0.1811 mysql> select RA

MYSQL 随机 抽取实现方法及效率分析_Mysql

复制代码 代码如下: 请教怎么从数据库随机读出15条记录? order by rand() limit 0,15 怎么从数据库随机读出所有记录? order by rand() 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描.但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机. 但是真正测试一下才发现这样效率非常低.一个15万余条的库,查询5条

MySQL随机选取数据

MySQ随机查询数据 以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩.他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.翻了手册,找到了下面这个语句,可以完成任务了. SELECT * FROM table_name ORDER BY rand() LIMIT 5; MySQL的rand()函数在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值. 关于MySQL的rand()函数的效率问

mysql 随机查询数据与性能分析

比如有一个需求,通过sql语句,返回-5至5的随机整数.如果这一个放在PHP中,则非常简单直接用 <?php print rand(-5,5); ?> 在mysql中,rand函数只能有一个参数. //摘自手册 RAND() RAND(N) 返回一个随机浮点值 v ,范围在 0 到1 之间 (即, 其范围为 0 ≤ v ≤ 1.0).若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列.   有两个方法可以达成以上效果. 1.新建一个表,里面存着 -5 至 5 之间的数.再利用ord