对于想了解MYSQL数据库MySQL取出随机数据的读者,本文将提供新的信息,我们将详细介绍mysql随机取数据,并且为您提供关于MySQL从表中取出随机数据、MySQL从表中取出随机数据_MySQL、
对于想了解MYSQL数据库MySQL取出随机数据的读者,本文将提供新的信息,我们将详细介绍mysql 随机取数据,并且为您提供关于MySQL 从表中取出随机数据、MySQL 从表中取出随机数据_MySQL、mysql 某字段插入随机数(插入随机数到MySQL数据库)_MySQL、MySQL中从表中取出随机数据性能优化的有价值信息。
本文目录一览:- MYSQL数据库MySQL取出随机数据(mysql 随机取数据)
- MySQL 从表中取出随机数据
- MySQL 从表中取出随机数据_MySQL
- mysql 某字段插入随机数(插入随机数到MySQL数据库)_MySQL
- MySQL中从表中取出随机数据性能优化
MYSQL数据库MySQL取出随机数据(mysql 随机取数据)
《MysqL数据库MysqL取出随机数据》要点:
本文介绍了MysqL数据库MysqL取出随机数据,希望对您有用。如果有疑问,可以联系我们。
他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.
翻了手册,找到了下面这个语句,可以完成任务了,但效率较低
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 RAND(20);
-> 0.1811
MysqL> select RAND();
-> 0.2079
MysqL> select RAND();
-> 0.7888
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次.然而在MysqL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的随机样本.注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估.
但我试了一下,8千条记录的表,执行一次需要0.08 sec,.慢了些
后来请教了google,得到如下代码
MysqL入门
SELECT * FROM table_name AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;
执行效率需要0.02 sec.可惜的是,只有MysqL 4.1.*以上才支持这样的子查询.
MysqL入门
下面是其它网友的补充:MysqL入门
select id from zhyx_items order by rand() 这样效率太低了MysqL入门
优化sql语句之后:MysqL入门
SELECT t1.id FROM zhyx_items AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM zhyx_items)-(SELECT MIN(id) FROM zhyx_items))+ (SELECT MIN(id) FROM zhyx_items)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 0,5;
《MysqL数据库MysqL取出随机数据》是否对您有启发,欢迎查看更多与《MysqL数据库MysqL取出随机数据》相关教程,学精学透。小编 jb51.cc为您提供精彩教程。
MySQL 从表中取出随机数据
实现随机,从手册中找到了下面这个语句,可以完成任务: SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的:: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
实现随机,从手册中找到了下面这个语句,可以完成任务:
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 RAND(20);
-> 0.1811
mysql> select RAND();
-> 0.2079
mysql> select RAND();
-> 0.7888
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c
注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。
但试了一下,,8千条记录的表,执行一次需要0.08 sec,慢了些。后来请教了Google,得到如下代码:
SELECT *
FROM table_name AS r1 JOIN
(SELECT ROUND(RAND() *
(SELECT MAX(id)
FROM table_name)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 5;
执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询.
MySQL 从表中取出随机数据_MySQL
实现随机,从手册中找到了下面这个语句,可以完成任务:
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 RAND(20);
-> 0.1811
mysql> select RAND();
-> 0.2079
mysql> select RAND();
-> 0.7888
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c
注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。
但试了一下,8千条记录的表,执行一次需要0.08 sec,慢了些。后来请教了google,得到如下代码:
SELECT * FROM table_name AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;
执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询.
mysql 某字段插入随机数(插入随机数到MySQL数据库)_MySQL
常用的代码
UPDATE `表名` SET `字段名`=ceiling(rand()*500000+500000) WHERE (条件);
update `表名` set click=click*0.01 where classid=''2'' and click>2000
我们经常会遇到使用随机的问题,下面就是一种解决随机数的方法。
在构造测试数据时,我们需要对测试表插入随机数据。构造测试数据的方法如下,仅以update为例说明
步骤1:随机数的SQL函数为rand() ,而rand()生成的是0-1之间的小数。
步骤2:将rand()*10
将产生1-10之间的带小数的数字,可以使用ceil进行转换。
步骤3:使用cast做类型转换
Cast的用法如下:
Cast(value as type)
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED
SELECT CAST(RAND()*10 AS signed) AS rand
步骤4:运行sql语句
UPDATE storm_effect_info s SET
s.fhtp = (SELECT CAST(RAND()*10 AS signed) AS rand)WHERE s.id = 13
MySQL中从表中取出随机数据性能优化
在mysql中随机读取数据的方法可能大家最简单且常用的做是rand() 这个函数,但是如果上千万数据就有问题了,下面我来介绍。
最简的办法
rand() 函数实例
代码如下 | 复制代码 |
SELECT * FROM table_name ORDER BY rand() LIMIT 5; |
花时间为 0.7888
如果这样在数据量大时就挂了 后来找到一个办法
代码如下 | 复制代码 |
SELECT * FROM table_name AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5; |
花时间0.02 sec
上面的语句采用的是JOIN,mysql的论坛上有人使用
代码如下 | 复制代码 |
SELECT * |
我测试了一下,需要0.5秒,速度也不错,但是跟上面的语句还是有很大差距。总觉有什么地方不正常。
于是我把语句改写了一下。
代码如下 | 复制代码 |
SELECT * FROM `table` |
这下,效率又提高了,查询时间只有0.01秒
最后,再把语句完善一下,加上MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有
一半的时间总是查询到表中的前面几行。
完整查询语句是:
代码如下 | 复制代码 |
SELECT * FROM `table` (SELECT MIN(id) FROM `table`))) ORDER BY id LIMIT 1;
`table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2 |
最后在php中对这两个语句进行分别查询10次,
前者花费时间 0.147433 秒
后者花费时间 0.015130 秒
我们今天的关于MYSQL数据库MySQL取出随机数据和mysql 随机取数据的分享已经告一段落,感谢您的关注,如果您想了解更多关于MySQL 从表中取出随机数据、MySQL 从表中取出随机数据_MySQL、mysql 某字段插入随机数(插入随机数到MySQL数据库)_MySQL、MySQL中从表中取出随机数据性能优化的相关信息,请在本站查询。
本文标签: