mysql中随机查询取值效率优化
2019/10/10/17:34:25 阅读:1890 来源:谷歌SEO算法 标签:
AI科学家
在mysql中随机查询数据是一个比较常用的功能,但是这个随机查询功能如果没使用好你的数据库就会卡死,特别到了几十万,上百万数据时更要注意了,下面我来介绍mysql中随机查询取值效率优化.
mysql使用rand()进行随机查询,代码如下:
order by rand() limit x
随机mysql查询效率极其低下,今晚本人就遇到几个wordpress插件的作者,随机取值,竟然都是直接,代码如下:
order by rand()
这也太坑爹了,数据一多,譬如你有个5万~10万,加上每天几千IP,那效率就跟蜗牛似的,不信你试试,这是严重不负责任的随机查询.
后来百度找了一个方法,代码如下:
- SELECT*
- FROMtable
- WHEREid>=(
- SELECTCEIL(RAND()*(
- SELECTMAX(id)
- FROMtable)))
- LIMIT1
- --或者
- SELECT*
- FROMtable
- WHEREid>=(
- SELECTROUND(RAND()*(
- SELECTMAX(id)
- FROMtable)))
- LIMIT1
但是还是没有效果了,再看下面,代码如下:
- SELECT*
- FROM`table`ASt1
- JOIN(
- SELECTROUND(RAND()*(
- SELECTMAX(id)
- FROM`table`))ASid
- )ASt2
- WHEREt1.id>=t2.id
- ORDERBYt1.idASC
- LIMIT1--phpfensi.com
这样就快了很多,但是这个方法,会导致大部分的取值都在1/2前范围内,需要重新改造下,代码如下:
- SELECT*
- FROM`table`ASt1JOIN(SELECTROUND(RAND()*((SELECTMAX(id)FROM`table`)-(SELECTMIN(id)FROM
- `table`))+(SELECTMIN(id)FROM`table`))ASid)ASt2
- WHEREt1.id>=t2.id
- ORDERBYt1.idLIMIT1;
热门评论