`

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


再把语句完善一下,加上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;


前者花费时间 0.147433 秒
后者花费时间 0.015130 秒

分享到:
评论

相关推荐

    批量生成mysql中文测试数据

    MySQL是一个流行的开源关系型数据库管理系统(RDBMS),对于处理大量数据和高并发访问具有良好的性能。在开发和优化过程中,测试数据的准确性和多样性至关重要,特别是对于中文数据,因为中文字符集的复杂性可能对...

    MySql分组后随机获取每组一条数据的操作

    补充知识:在MySQL中,随机选取多条数据也有多种方法,但效率各不相同。以下列举了六种常见的方法: 1. 直接使用`RAND()`函数: ```sql SELECT * FROM tablename ORDER BY RAND() LIMIT 想要获取的数据条数; ```...

    随机读场景下的MySQL性能优化方案.pdf

    MySQL性能优化在随机读场景下是一项关键任务,特别是在大数据量和高并发的业务环境中。MyRocks作为MySQL的一个存储引擎,结合了MySQL的成熟稳定性和RocksDB的高性能特性,为解决这一问题提供了新的可能。 MyRocks是...

    MySQL取出随机数据

    以下是几种常用的抽取随机数据的方法: 1. **使用`ORDER BY RAND()`**: 这是最直观也最简单的做法,通过在`SELECT`语句中添加`ORDER BY RAND()`,可以将表中的数据随机排序,然后使用`LIMIT`来限制返回的行数。...

    辛星笔记之MySQL优化篇

    `RAND()`函数在MySQL中用于生成一个介于0到1之间的随机浮点数,可以用于选取数据表中的随机记录。`WITH ROLLUP`用于`GROUP BY`子句中,提供了额外的汇总行,可以用来实现更复杂的统计分析。 3. 锁问题:数据库锁是...

    mysql数据库my.cnf配置文件

    # MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大 sort_buffer_size = ...

    MySQL体系结构及原理(innodb)图文完美解析

    InnoDB是MySQL中最常用的一种存储引擎,它支持事务安全性和行级锁定,这使得它非常适合处理高并发或多用户的应用场景。InnoDB提供了多种高级功能,如外键约束、事务管理以及崩溃恢复机制等。 3. **MySQL与InnoDB的...

    MySQL索引原理

    根据索引的特点,可以将其大致分为以下几种类型: 1. **单列索引**:一个索引只包含单个列。 2. **复合索引**:一个索引包含多个列。 3. **唯一索引**:确保列中的值具有唯一性。 4. **全文索引**:用于全文搜索的...

    MySQL如何快速的创建千万级测试数据

    首先,我们了解几种常见的创建测试数据的方法。 1. **编写代码插库**:这种方法虽然灵活,但往往需要编写大量代码,且性能可能较低,不推荐作为首选。 2. **使用存储过程和函数**:通过MySQL的存储过程和函数,...

    Mysql全局ID生成方法

    MySQL全局ID生成方法是数据库设计中的一个重要议题,特别是在大规模分布式系统中,确保ID的全局唯一性和高并发下的高效生成是数据库架构的关键要素。以下是一些常见的全局ID生成策略: 1. **基于CAS(Check and Set...

    基于遗传算法的MYSQL数据库检索策略优化与设计.pdf

    二是查询过程重用方法,通过缓存查询结果,减少重复的语法分析和数据查询,提高效率。 在实际应用中,遗传算法优化MySQL数据库检索策略,不仅可以提高查询速度,减少资源消耗,还能帮助系统管理员更好地理解并优化...

    PHP MYSQL抢钱派对抢红包商业版程序源码【修正后最新VIP版】

    MySQL以其高效率、稳定性和可扩展性而受到广大开发者青睐。在这个抢红包程序中,MYSQL作为数据存储的主要工具,存储了用户的账号信息、红包金额、已抢红包记录等关键数据。开发者可能使用SQL语句来创建、查询、更新...

    MySQL 开发规范

    - **举例**:如性别、是否删除等字段,这类字段值域很小,通常只有几种固定的值,加索引反而可能会降低查询效率。 - **目的**:避免不必要的索引开销。 **1.2 常用的字段放在前面;选择性高的字段放在前面** - **...

    基于java的学生随机点名系统

    Java是一种广泛应用于软件开发的高级编程语言,以其跨平台性和丰富的类库闻名。在教育领域,利用Java技术可以构建高效、易用的学生考勤系统,实现自动化点名功能,大大提高了教师的工作效率。本项目“基于Java的学生...

    网易技术部MySQL中文资料

    - 对InnoDB、MyISAM等几种常见的存储引擎进行了详细介绍,包括它们各自的特点、适用场景以及优缺点。 - **2.3 如何选择合适的存储引擎** - 提供了一套决策流程或指南,帮助开发者根据实际业务需求选择最合适的存储...

Global site tag (gtag.js) - Google Analytics