`
化蝶自在飞
  • 浏览: 2329471 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

mysql随机查询的优化 mysql随机函数RAND()的使用方法

阅读更多
mysql随机查询最常见的写法如下:
SELECT * FROM tablename ORDER BY RAND() LIMIT 1


php手册上如此解释:
About selecting random rows from a MySQL table:

SELECT * FROM tablename ORDER BY RAND() LIMIT 1

works for small tables, but once the tables grow larger than 300,000 records or so this will be very slow because MySQL will have to process ALL the entries from the table, order them randomly and then return the first row of the ordered result, and this sorting takes long time. Instead you can do it like this (atleast if you have an auto_increment PK):

SELECT MIN(id), MAX(id) FROM tablename;

Fetch the result into $a

$id=rand($a[0],$a[1]);

SELECT * FROM tablename WHERE id>='$id' LIMIT 1

大意是说,如果你用 ORDER BY RAND() 来随机读取记录的话,当数据表记录达到30万或者更多的时候,mysql将非常吃力.
所以php手册里给了一种方法,结合php来实现:
首先 SELECT MIN(id), MAX(id) FROM tablename; 取数据库里最大最小值;
然后 $id=rand($a[0],$a[1]); 产生一个随机数;
最后 SELECT * FROM tablename WHERE id>='$id' LIMIT 1 将上面产生的随机数带入查询;

还有其他更优的方法,欢迎加入讨论.
分享到:
评论

相关推荐

    MySQL数据库优化SQL篇PPT课件.pptx

    从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和Count等方面对MySQL数据库优化进行了详细的讲解。 一、执行计划 执行计划是MySQL数据库优化的重要步骤。执行计划...

    MYSQL随机抽取查询 MySQL Order By Rand()效率问题

    总之,当面临MySQL中的随机查询效率问题时,避免在`ORDER BY`子句中直接使用`RAND()`函数,而是利用主键和`RAND()`结合的方式,或者采用`JOIN`操作,可以显著提升查询速度。在实际应用中,应根据具体场景和数据量...

    MySQL中的RAND()函数使用详解

    当你在查询的ORDER BY子句中使用RAND(),MySQL会随机地对查询结果进行排序。比如,你有一个名为`employee_tbl`的表,想要随机显示员工的信息,可以这样操作: ```sql SELECT * FROM employee_tbl ORDER BY RAND();...

    mysql随机查询若干条数据的方法

    在mysql中查询5条不重复的数据,使用以下: 代码如下:SELECT * FROM `table` ORDER BY RAND() LIMIT 5 就可以了。但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上搜索Google...

    MySQL的指定范围随机数函数rand()的使用技巧

    MySQL中的`RAND()`函数是一个非常实用的工具,用于生成0到1之间的随机浮点数。在某些场景下,我们可能需要生成指定范围内的随机整数,例如在模拟数据或者进行测试时。`RAND()`函数虽然不能直接接收参数来定义这个...

    MySQL 随机函数获取数据速度和效率分析

    在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的。下面我来介绍随机取数据一些优化方法。 SELECT * FROM...

    mysql优化取随机数据慢的方法

    这里我是直接使用mysql rand by函数来直接,几千条记录没关系,但如果到了几万条感觉要几秒,这个就很慢了,下面小编与大家一起来看看mysql 取随机数据慢优化过程。MySQL很多时候需要获取随机数据,举个例子,要从...

    MySQL性能优化的21个最佳实践.pdf

    然而,使用某些函数如CURDATE()、NOW()或RAND()会导致查询不被缓存,因为这些函数返回的结果是不定的、易变的。因此,建议使用变量代替这些函数,以便开启查询缓存。 其次,使用EXPLAIN关键字可以让你了解MySQL如何...

    MySQL 随机查询数据与随机更新数据实现代码

    这里的`RAND()`函数在MySQL中返回0到1.0之间的随机浮点值。通过`ORDER BY RAND()`,数据库会根据这个随机值对表中的所有记录进行排序,然后`LIMIT 5`限制返回结果的数量为5。请注意,这种查询方式可能会对性能产生...

    MySQL数据库优化SQL篇PPT学习教案.pptx

    MySQL数据库优化SQL篇学习教案旨在帮助读者学习和掌握 MySQL 数据库优化的相关知识,涵盖了 SELECT 语句优化、执行计划、IN 和 EXISTS 语句、LIMIT 语句、RAND 函数、Order、Group、Distinct 和 Count 等方面的知识...

    MySQL性能优化的最佳经验

    常见的动态函数包括`CURDATE()`、`NOW()`和`RAND()`等,因为这些函数的返回值会根据时间或随机因素发生变化。为了充分利用查询缓存,可以通过使用变量替代这些动态函数的方式,确保查询缓存能够正常工作。 #### 2. ...

    辛星笔记之MySQL优化篇

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

    Mysql\学习笔记\mysql优化

    ` 可以随机选取表中的5行数据,但RAND()函数会导致全表扫描,对大数据量的表不建议频繁使用。 3. GROUP BY with ROLLUP:GROUP BY语句配合WITH ROLLUP可以生成更详尽的分组统计信息,不仅包含各组的聚合结果,还...

Global site tag (gtag.js) - Google Analytics