举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,仍然可以通过ORDER...
从数据库中随机取一条记录时,可以把RAND()生成随机数放在JOIN子查询中以提高效率。 5、再来看看用ORDRR BY RAND()方式一次取得多个随机值的方式: [yejr@imysql]> explain select id from t_innodb_random order by rand() limit 1000\G *** 1. row *** id: 1 select_type: SIMPLE table: t_innodb...
SELECTidFROMtableORDERBYRAND() LIMIT n; 优化为: SELECTidFROMtablet1JOIN(SELECTRAND()*(SELECTMAX(id)FROMtable)ASnid) t2ONt1.id>t2.nid LIMIT n; 或 SELECTidFROMtablet1JOIN(SELECTround(RAND()*(SELECTMAX(id)FROMtable))ASnidFROMtableLIMIT n) t2ONt1.id=t2.nid;...
举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,仍然可以通过ORDER...
ORDER BY RAND( ) LIMIT 1idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEtableALLNULLNULLNULLNULL173784Using temporary; Using filesort 这个SQL语句无法使用任何索引,还必须使用临时表和文件排序,在一个15万条记录的MyISAM表需要花大约0.3秒。已经是相当慢的了。如何优化,请往下看: ...
order by rand()的改进 我们前面说过,实际上对于这种简单的order by rand() 的情况,也可以等同于按照非索引字段来处理。在sort_array 中存入随机值即可。 按照这个思路的patch在这里,效果上 执行时间减少为1.89s,性能提升21%, 这个例子单行1k,单行越大提升效果越好。
第一种方案,即原始的 Order By Rand() 方法: SELECT * FROM content ORDER BY rand() LIMIT 12"; 3万条数据查12条随机记录,需要0.125秒,随着数据量的增大,效率越来越低。 第二种方案,改进后的 JOIN 方法: SELECT * FROM `content` AS t1
4.随机选一些数据,不要使用Order by Rand() 上面的查询,会导致每条记录都执行rand(),成本很高! 建议,通过mt_rand(),先确定的随机主键,再从数据表中获取数据。 九、慢查询日志的使用 定位执行较慢的查询语句方案。 show variables like 'slow_query%'; show variables like '%long_query%'; ...
SELECT * FROM tablename ORDER BY RAND() LIMIT 1; 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机。
另一种常见的随机查询方法是使用ORDER BY RAND()来对结果集进行随机排序。这种方法同样会导致性能问题,特别是在处理大量数据时。因为ORDER BY RAND()会导致MySQL对整个结果集进行排序,这对性能来说是一个很大的负担。 使用子查询进行随机查询 一种优化随机查询的方法是使用子查询。通过先查询出符合条件的记录,然后再...