`
kongzimengsheng1
  • 浏览: 68513 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

也来谈一下随即查询数据的效率问题

阅读更多
也来谈一下随即查询数据的效率问题
看到这篇文章:
http://jnote.cn/blog/mysql/mysql-rand-efficiency.html

我做了些测试:

mysql> show create table song\G
*************************** 1. row ***************************
       Table: song
Create Table: CREATE TABLE `song` (
  `id` int(11) NOT NULL auto_increment COMMENT 'Autoincreament element',
  `name` mediumtext NOT NULL,
  `datetime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIME
STAMP,
  `rank` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `f_rank` (`rank`)
) ENGINE=MyISAM AUTO_INCREMENT=1752001 DEFAULT CHARSET=gbk
1 row in set (0.00 sec)
mysql> select count(1) from song;
+----------+
| count(1) |
+----------+
|  1752000 |
+----------+
1 row in set (0.00 sec)

mysql> select * from song order by rand() limit 10;
+---------+----------+---------------------+---------+
| id      | name     | datetime            | rank    |
+---------+----------+---------------------+---------+
|  440107 | t440107  | 2007-12-04 14:59:37 | 4335260 |
| 1237909 | t1237909 | 2007-12-04 15:00:42 | 7867024 |
|   75076 | t75076   | 2007-12-04 14:59:08 | 1725100 |
| 1351876 | t1351876 | 2007-12-04 15:00:52 | 6407879 |
|  915284 | t915284  | 2007-12-04 15:00:15 | 7382198 |
|  110507 | t110507  | 2007-12-04 14:59:11 | 6505687 |
| 1256420 | t1256420 | 2007-12-04 15:00:44 | 8501775 |
|  668347 | t668347  | 2007-12-04 14:59:56 | 4243303 |
|  547132 | t547132  | 2007-12-04 14:59:46 | 7121637 |
|  621792 | t621792  | 2007-12-04 14:59:52 | 7006891 |
+---------+----------+---------------------+---------+
10 rows in set (3.70 sec)

SELECT * FROM song AS t1 JOIN
(
  SELECT ROUND(RAND() * (SELECT MAX(id) FROM song)) AS id
) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 10;
mysql> SELECT * FROM song AS t1 JOIN
    -> (
    ->   SELECT ROUND(RAND() * (SELECT MAX(id) FROM song)) AS id
    -> ) AS t2
    -> WHERE t1.id >= t2.id
    -> ORDER BY t1.id ASC LIMIT 10;
+---------+----------+---------------------+---------+---------+
| id      | name     | datetime            | rank    | id      |
+---------+----------+---------------------+---------+---------+
| 1566855 | t1566855 | 2007-12-04 15:01:10 | 7827537 | 1566855 |
| 1566856 | t1566856 | 2007-12-04 15:01:10 |  846094 | 1566855 |
| 1566857 | t1566857 | 2007-12-04 15:01:10 |  747858 | 1566855 |
| 1566858 | t1566858 | 2007-12-04 15:01:10 | 1201006 | 1566855 |
| 1566859 | t1566859 | 2007-12-04 15:01:10 | 3761459 | 1566855 |
| 1566860 | t1566860 | 2007-12-04 15:01:10 | 5204274 | 1566855 |
| 1566861 | t1566861 | 2007-12-04 15:01:10 | 4736994 | 1566855 |
| 1566862 | t1566862 | 2007-12-04 15:01:10 | 8072147 | 1566855 |
| 1566863 | t1566863 | 2007-12-04 15:01:10 | 6149754 | 1566855 |
| 1566864 | t1566864 | 2007-12-04 15:01:10 | 6532326 | 1566855 |
+---------+----------+---------------------+---------+---------+
10 rows in set (0.02 sec)

SELECT * FROM `song` WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `song`)-(SELECT MIN(id) FROM `song`)) + (SELECT MIN(id) FROM `song`))) ORDER BY id LIMIT 10;
mysql> SELECT * FROM `song` WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id)
 FROM `song`)-(SELECT MIN(id) FROM `song`)) + (SELECT MIN(id) FROM `song`))) ORD
ER BY id LIMIT 10;
+------+-------+---------------------+---------+
| id   | name  | datetime            | rank    |
+------+-------+---------------------+---------+
| 2142 | t2142 | 2007-12-04 14:59:03 | 3644248 |
| 2411 | t2411 | 2007-12-04 14:59:03 | 9358685 |
| 4401 | t4401 | 2007-12-04 14:59:03 | 7664728 |
| 4732 | t4732 | 2007-12-04 14:59:03 | 3501462 |
| 4768 | t4768 | 2007-12-04 14:59:03 | 1688296 |
| 4820 | t4820 | 2007-12-04 14:59:03 |  346328 |
| 5075 | t5075 | 2007-12-04 14:59:03 | 3586428 |
| 5167 | t5167 | 2007-12-04 14:59:03 | 3742607 |
| 5224 | t5224 | 2007-12-04 14:59:03 | 5285546 |
| 6244 | t6244 | 2007-12-04 14:59:03 | 3076592 |
+------+-------+---------------------+---------+
10 rows in set (0.03 sec)
SELECT * FROM `song` WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `song`)))) ORDER BY id LIMIT 20;
mysql> SELECT * FROM `song` WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id)
 FROM `song`)))) ORDER BY id LIMIT 20;
+------+-------+---------------------+---------+
| id   | name  | datetime            | rank    |
+------+-------+---------------------+---------+
| 1874 | t1874 | 2007-12-04 14:59:03 | 1974147 |
| 2090 | t2090 | 2007-12-04 14:59:03 | 8433426 |
| 2653 | t2653 | 2007-12-04 14:59:03 | 2637918 |
| 3244 | t3244 | 2007-12-04 14:59:03 | 2044034 |
| 3538 | t3538 | 2007-12-04 14:59:03 |  728785 |
| 3703 | t3703 | 2007-12-04 14:59:03 | 5099125 |
| 4941 | t4941 | 2007-12-04 14:59:03 | 7530856 |
| 5059 | t5059 | 2007-12-04 14:59:03 | 2147224 |
| 5494 | t5494 | 2007-12-04 14:59:03 | 8994486 |
| 5550 | t5550 | 2007-12-04 14:59:03 | 1054949 |
| 5953 | t5953 | 2007-12-04 14:59:03 | 5898393 |
| 6515 | t6515 | 2007-12-04 14:59:03 | 7227102 |
| 6818 | t6818 | 2007-12-04 14:59:03 | 4292209 |
| 6962 | t6962 | 2007-12-04 14:59:03 | 7107078 |
| 7242 | t7242 | 2007-12-04 14:59:03 | 1639503 |
| 7449 | t7449 | 2007-12-04 14:59:03 |  547861 |
| 8109 | t8109 | 2007-12-04 14:59:03 | 2031446 |
| 8764 | t8764 | 2007-12-04 14:59:03 | 3934261 |
| 8808 | t8808 | 2007-12-04 14:59:03 | 1433932 |
| 9283 | t9283 | 2007-12-04 14:59:04 | 1558430 |
+------+-------+---------------------+---------+
20 rows in set (0.03 sec)
分享到:
评论

相关推荐

    生成随即的用户数据,以后再也不用绞尽脑汁凑测试用户数据了.zip

    生成随即的用户数据,以后再也不用绞尽脑汁凑测试用户数据了。.zip,Framework to Generate Random Users - An Unofficial Swift SDK for randomuser.me

    完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)

    总的来说,处理MySQL启动后随即关闭的问题,尤其是由`ibdata1`文件损坏引起的情况,需要细致的故障排查和恢复策略。通过理解MySQL的日志信息,配合适当的工具和方法,通常可以成功解决此类问题。

    VC环境下高速实时数据采集的实现

    具体来说,数据采集和数据处理分别在不同的线程中运行,这样可以充分利用现代多核处理器的并行处理能力,显著提高整个系统的性能和效率。 - **数据采集线程**:负责接收来自A/D转换器的数据,并将其暂时保存在一个...

    winrunner 例子2随即文件夹中的数据拷贝

    通过对“WinRunner例子2随即文件夹中的数据拷贝”的详细分析,我们了解了在自动化测试过程中如何利用 WinRunner 来实现随机文件夹名称的生成以及文件的数据拷贝操作。这一过程不仅涉及到对 TSL 脚本语言的理解与运用...

    金融行业数据资产管理1

    随着金融行业数字化转型的浪潮,数据量的快速累积和膨胀,数据结构、数据类型趋于多元化,数据服务场景的持续丰富和拓展,也随即引发了比较严重的数据质量、安全、成本等问题。 1. 行业挑战 金融行业面临着以下...

    Oracle数据仓库设计与使用PPT学习教案.pptx

    3. 数据使用层:提供报表、随即查询、多维分析和数据挖掘工具,以满足不同用户的需求,帮助他们快速访问和分析数据。 在数据获取层,Oracle强调ETL的重要性,确保数据源与数据仓库之间的有效连接,同时处理可能出现...

    Oracle数据仓库设计与使用说明.pptx

    数据使用层负责将数据仓库系统中的数据和分析结果提供给最终用户,实现报表、随即查询、多维分析和数据挖掘等功能。 Oracle 的数据仓库系统的逻辑体系架构是由三层组成:数据获取层、数据管理层和数据使用层。数据...

    CX-测斜仪数据处理程序v8.6.1.rar

    本程序用于对测斜数据进行分析处理,形成数据报表,数据统计分析等首次运行,会在程序所在文件夹添加几个.DLL文件, 随即消失,然后程序启动,此时即可正常使用。下次在运行,就会直接启动主程序,进入数据分析。...

    随即数据处理方法第三版课后习题答案

    随机数据处理方法第三版课后习题答案,中国石油大学(华东)出版社,答案详细,保证准确!

    数学建模实验随即一致性检验(附实验报告)

    在数学建模中,随机一致性检验是一种评估模型假设是否合理,以及模型参数估计是否可靠的统计方法。...实验一随即一致性指标文件很可能是实验数据和计算结果的记录,对于深入理解这个过程至关重要。

    执行随即机生产消费者进程

    总结来说,"执行随即机生产消费者进程"是一个涉及多线程并发编程的问题,其中随机产生的进程交替扮演生产者和消费者角色,通过共享的缓冲区进行通信。理解和实现这样的系统对于提升并发应用程序的效率和正确性至关...

    torch 数据增强-随机擦除(随机遮挡)-两种方案

    第一种 原文 class RandomErasing(object): def __init__(self, p=0.5, sl=0.02, sh=0.4, r1=0.3, r2=3): self.p = p self.sl = sl self.sh = sh self.r1 = r1 self.r2 = r2 def __call__(self, img): ...

    华德安数据采集工作站.doc

    总的来说,华德安数据采集工作站是一个专业且便捷的数据处理平台,它的核心在于保障执法数据的安全、有效流转,同时也考虑到了操作简便性和系统稳定性。无论是日常数据采集,还是后期的数据管理,都能提供强大的支持...

    水下地形测量中无人船的应用与数据处理研究.pdf

    在该项目中,无人船利用无线网桥技术将数据实时发送到地面上的测量基站,基站随即进行数据监控、储存和分析工作。通过这种技术手段,不仅可以保证数据传输的实时性,还可以大幅度提升数据处理的效率和准确性。 在...

    SQL2005中数据导入.

    在SQL Server 2005中,数据导入和导出是一项基本操作,它允许用户将数据从一个数据库传输到另一个数据库,或者从外部...在实际操作中,可能会遇到各种具体情况,如数据类型不匹配、权限问题等,需要灵活应对并解决。

    datawatch_随即漫步_

    5. **数据可视化**:`rw_visual.py`文件可能包含代码来可视化随即漫步的结果。Python的`matplotlib`库是常用的数据可视化工具,可以创建线图或散点图展示路径。可能使用`plot`函数绘制路径,`show`函数显示图像。 6...

    基于Android的高效短信查询软件的实现

    然而,当前智能手机中的短信查询功能存在明显缺陷,主要体现在查询方式单一(如按顺序查找或按联系人查找)和查询效率低(如线性查找的时间复杂度为O(n))等问题上。为此,本文旨在设计一款能够高效查询短信的第三方...

    数据挖掘技术分析及其应用评价.docx

    其具体设计的方法主要就是引入了数据挖掘分类系统,从而让所有数据样本成为等价的,然后在大范围内进行随即筛选。 数据挖掘技术可以应用于各个领域,并且有很多种不同的方法和技术可以选择。每种方法和技术都有其...

Global site tag (gtag.js) - Google Analytics