GVKun编程网logo

MYSQL数据库MySQL取出随机数据(mysql 随机取数据)

19

对于想了解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 从表中取出随机数据

MySQL 从表中取出随机数据

实现随机,从手册中找到了下面这个语句,可以完成任务: SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的:: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。 mysql select 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 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 从表中取出随机数据_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

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中从表中取出随机数据性能优化

在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 *
FROM `table`
WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
ORDER BY id LIMIT 1;


我测试了一下,需要0.5秒,速度也不错,但是跟上面的语句还是有很大差距。总觉有什么地方不正常。

于是我把语句改写了一下。

 代码如下 复制代码

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


这下,效率又提高了,查询时间只有0.01秒

最后,再把语句完善一下,加上MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有

一半的时间总是查询到表中的前面几行。
完整查询语句是:

 代码如下 复制代码

SELECT * FROM `table`
WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) +

(SELECT MIN(id) FROM `table`)))  ORDER BY id LIMIT 1;


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 id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;

最后在php中对这两个语句进行分别查询10次,
前者花费时间 0.147433 秒
后者花费时间 0.015130 秒

我们今天的关于MYSQL数据库MySQL取出随机数据mysql 随机取数据的分享已经告一段落,感谢您的关注,如果您想了解更多关于MySQL 从表中取出随机数据、MySQL 从表中取出随机数据_MySQL、mysql 某字段插入随机数(插入随机数到MySQL数据库)_MySQL、MySQL中从表中取出随机数据性能优化的相关信息,请在本站查询。

本文标签: