mysql中随机查询取值效率优化
发布时间:2022-07-04 10:36:26 所属栏目:MySql教程 来源:互联网
导读:在mysql中随机查询数据是一个比较常用的功能,但是这个随机查询功能如果没使用好你的数据库就会卡死,特别到了几十万,上百万数据时更要注意了,下面我来介绍mysql中随机查询取值效率优化. mysql使用rand()进行随机查询,代码如下: order by rand() limit x 随机m
在mysql中随机查询数据是一个比较常用的功能,但是这个随机查询功能如果没使用好你的数据库就会卡死,特别到了几十万,上百万数据时更要注意了,下面我来介绍mysql中随机查询取值效率优化. mysql使用rand()进行随机查询,代码如下: order by rand() limit x 随机mysql查询效率极其低下,今晚本人就遇到几个wordpress插件的作者,随机取值,竟然都是直接,代码如下: order by rand() 这也太坑爹了,数据一多,譬如你有个5万~10万,加上每天几千IP,那效率就跟蜗牛似的,不信你试试,这是严重不负责任的随机查询. 后来百度找了一个方法,代码如下: SELECT * FROM table WHERE id >= ( SELECT CEIL( RAND( ) * ( SELECT MAX( id ) FROM table ) ) ) LIMIT 1 --或者 SELECT * FROM table WHERE id >= ( SELECT ROUND( RAND( ) * ( SELECT MAX( id ) FROM table ) ) ) LIMIT 1 但是还是没有效果了,再看下面,代码如下: SELECT * FROM `table` AS t1 JOIN ( SELECT ROUND( RAND( ) * ( SELECT MAX( id ) FROM `table` ) ) AS id ) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id ASC LIMIT 1 --phpfensi.com 这样就快了很多,但是这个方法,会导致大部分的取值都在1/2前范围内,需要重新改造下,代码如下: 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; (编辑:甘孜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |