`
- 浏览:
379397 次
- 性别:
- 来自:
北京
-
MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1
但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机。
但是真正测试一下才发现这样效率非常低。一个100万余条的库,查询1条数据,居然要4秒以上。查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低。
You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.
搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。
select * from instanceprice_attach where id <= (SELECT FLOOR(RAND() * (SELECT MAX(ID) FROM INSTANCEPRICE_ATTACH))) order by id limit 1
这样大概95ms。
原来写的是>=,一直是id最大的那条记录。
有人这样处理取得重复记录:
SELECT t1.*
FROM tablename AS t1 JOIN
(SELECT ROUND(RAND() * ((SELECT MAX(id) FROM tablename )-(SELECT MIN(id) FROM tablename ))+
(SELECT MIN(id) FROM tablename)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;
SELECT * FROM tablename
WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM tablename )-
(SELECT MIN(id) FROM tablename )) + (SELECT MIN(id) FROM tablename )))
ORDER BY id LIMIT 1;
大概都是90多毫秒,网上说第一种写法会快一点,但是我测试貌似没什么区别。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本文实例讲述了PHP实现在数据库百万条数据中随机获取20条记录的方法。分享给大家供大家参考,具体如下: 额,为什么要写这个? 在去某个公司面试时,让写个算法出来,当时就蒙了,我开发过程中用到算法的吗?又不是...
### MySQL 获取行号row_no 在数据库操作中,有时候我们需要为查询结果集中的每一行添加一个行号(或行序号),类似于Oracle中的`ROW_NUMBER()`功能。然而MySQL并未直接提供与Oracle完全相同的功能,因此我们需要...
在PHP与MySQL交互时,有时候我们需要从数据库中随机获取数据,比如用于展示推荐内容、轮播图或者其他随机展示的信息。本文将介绍几种PHP随机获取MySQL记录的方法。 **方法一:Order By Rand()** 这是最常见的一种...
在MySQL数据库中,有时我们需要对数据进行分组处理,并从每个分组中随机选取一条记录。这在统计分析或者抽样调查等场景中非常常见。本文将详细介绍如何在MySQL中实现这一操作,以及一些关于随机选取数据的优化方法。...
在MySQL中,随机获取数据是一项常见的需求,但不恰当的方法可能会导致性能问题,尤其是在处理大量数据时。这里我们将深入探讨MySQL中的随机函数及其效率。 首先,最直观的随机选取数据的方法是使用`ORDER BY RAND()...
在SQL(Structured Query ...以上就是关于“SQL随机抽取N条记录”的详细解释,这些方法可以帮助你从数据库中获取随机样本,无论是进行数据分析还是其他目的。记住,根据你使用的具体SQL方言,可能需要调整上述代码。
这个过程可能需要大量的数据准备,因为每个汉字都要有对应的拼音记录。 然后,我们可以创建一个自定义的MySQL函数,如`convert_to_pinyin()`,用于将输入的中文字符串转换为拼音。这个函数可能会涉及到GBK到UTF-8的...
在MySQL中,获取随机数据是一项常见的需求,但处理大规模数据时需要特别的策略,因为简单地使用`ORDER BY RAND()`可能会导致性能问题。当数据量达到百万级别时,这种做法会变得极其缓慢,因为它需要对整个表进行排序...
在IT领域,随机抽取记录软件是一种非常实用的工具,尤其在数据分析、教育评估、抽奖活动或者市场调研等场景中。这种软件允许用户从一组数据中按照预设规则随机选取特定的记录,确保了过程的公正性和随机性。下面将...
MySQL数据库在进行随机查询记录时,效率...通过这样的方法,即使在大型数据集中,也能快速有效地获取随机记录,从而提高应用性能。在实际应用中,应根据具体需求和表结构选择合适的查询策略,确保查询效率和准确性。
因为数据页在磁盘上的位置是不固定的,所以需要通过磁盘的随机读写来获取或更新数据。磁盘随机读写的性能直接影响数据库的I/O性能,尤其对数据库的并发操作能力和响应延迟有重要影响。为了优化随机读写的性能,推荐...
MySQL基础数据生成工具...通过"Release"这个压缩包文件,用户可以获取到这个工具的最新版本,开始自己的MySQL学习之旅。无论是初学者还是经验丰富的开发者,都可以借助这个工具加深对MySQL的理解,提升数据库操作技能。
MySQL中的随机抽取记录是一种常见的需求,特别是在数据采样或者创建随机测试数据时。然而,实现这一功能的方法多种多样,每种方法的效率也不尽相同。本文将深入探讨两种常见的实现方式及其效率分析。 首先,最直观...
MySQL很多时候需要获取随机数据,举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是: 代码如下:SELECT * FROM tablename ORDER BY RAND() LIMIT 1 但是,后来我查了一下MYSQL的官方手册,里面针对...
- 在安装过程中,系统可能会提示设置随机的root密码,这些信息会被记录在`/root/.mysql_secret`文件中。 - 如果检测到已有配置文件(如`/usr/my.cnf`),则不会覆盖原有配置文件,而是基于该文件继续进行安装。 #...
这种方法的核心思想是先生成一个随机的ID值,然后找到大于等于这个ID的所有记录,最后通过`LIMIT`获取所需数量的记录。具体实现如下: ```sql SELECT * FROM `table` AS t1 JOIN ( SELECT ROUND( RAND() * (...
在处理多条记录时,例如需要随机抽取5条数据,可以使用上述方法反复执行5次,或者稍微修改查询语句以一次性获取。但要注意,如果要确保不重复地抽取5条数据,可能需要采用不同的策略,比如先生成一个不重复的随机...