order by rand()优化
优化前:
SELECT
id,
loan_id,
NAME,
company
FROM
tablename
WHERE
time BETWEEN 1522512000
AND 1525103999
AND loan_time BETWEEN 1522512000
AND 1525103999
AND STATUS = 1
AND is_again_yd = 0
AND company <> 1
order by rand()
LIMIT 30
优化方案一:
采用JOIN,查询max(id) * rand()来随机获取数据。
SELECT
t1.id,
t1.loan_id,
t1. NAME,
t1.company
FROM
`tablename` AS t1
JOIN (
SELECT
ROUND(
RAND() * (
SELECT
MAX(id)
FROM
`tablename`
)
) AS id
) AS t2
WHERE
t1.id >= t2.id
AND time BETWEEN 1522512000
AND 1525103999
AND loan_time BETWEEN 1522512000
AND 1525103999
AND STATUS = 1
AND is_again_yd = 0
AND company <> 1
ORDER BY t1.id ASC
LIMIT 30;
优化方案二:
SELECT
t1.id,
t1.loan_id,
t1.NAME
FROM
tablename t1
WHERE
t1.id >= (
SELECT
floor(
RAND() * (
SELECT
MAX(id)
FROM
`tablename`
)
)
)
AND t1.time BETWEEN 1522512000 AND 1525103999
AND t1.STATUS IN (1, 2, 4)
AND t1.type IN (1, 2)
AND t1.belong_company = 0
AND t1.is_del = 0
AND NOT EXISTS (
SELECT
loan_id
FROM
tablename2 t2
WHERE
t2.loan_id = t1.loan_id
AND t2.company = 1
)
ORDER BY id
limit 20
说明:这种方案替代mysql rand(),性能太幅度提升,随机性没有rand()强,如果随机性强的请选择替代方案。
order by rand()优化的更多相关文章
- mysql order by rand() 优化方法
mysql order by rand() 优化方法 适用于领取奖品等项目<pre>mysql> select * from user order by rand() limit 1 ...
- 【MySQL性能优化】改进MySQL Order By Rand()的低效率
<a href="http://click.aliyun.com/m/9153/">点击查看原文</a> 正 文: 最近由于需要研究了一下MYSQL的随 ...
- MySQL Order By Rand()效率
最近由于需要大概研究了一下MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RA ...
- MySQL 中随机抽样:order by rand limit 的替代方案
最近由于需要大概研究了一下MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RA ...
- 一次 group by + order by 性能优化分析
一次 group by + order by 性能优化分析 最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家 ...
- 聊聊order by rand()
总结写在前面: 1. 不建议直接使用order by rand(),原因是执行代价比较大 2. 介绍了内存临时表,对于内存临时表,由于回表不需要访问磁盘,所以往往是用rowid排序,可以减少参与排序字 ...
- MySQL的Order By Rand()的效率问题
MySQL很多时候需要获取随机数据,举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是: 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在OR ...
- MYSQL随机抽取查询 MySQL Order By Rand()效率问题
MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机 ...
- ORDER BY RAND()
大概是因为需要研究了一下MYSQL随机样本实现.例如:离tablename表随机抽取了创纪录,我们一般的写法是:SELECT * FROM tablename ORDER BY RAND() LIMI ...
随机推荐
- JS - 查找字符串中的某个值,截取其之前。和之后的值
var str = "11:222"; /* * 截取 “ :”之前和之后的值 */document.write(str.split(':')[0]) //输出11doc ...
- eclipse启动tomcat访问localhost:8080报404
直接双击tomcat\bin目录下面的startup.bat启动 是没问题 的 但是eclipse启动tomcat访问localhost:8080报404 解决方案如下: 双击红色圈里面的tomcat ...
- 九、SAP中使用定义时间及使用sy-uzeit取当前时间
一.sy-uzeit为取当前时间函数,类型t为时间类型,代码如下: 二.输出结果如下:
- Vue.js(24)之 弹窗组件封装
同事封装了一个弹窗组件,觉得还不错,直接拿来用了: gif图展示: 弹框组件代码: <template> <transition name="confirm-fade&qu ...
- 腾讯云服务器上搭建 2.176.3-1.1 版本的Jenkins,jdk 11
[root@VM_0_12_centos fonts]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@VM_0 ...
- 十一、React 获取服务器数据: axios插件、 fetch-jsonp插件的使用
react获取服务器APi接口的数据: react中没有提供专门的请求数据的模块.但是我们可以使用任何第三方请求数据模块实现请求数据 一.axios 获取Api数据 使用文档:https://www. ...
- vue 父子传值,子页面没有实时刷新的问题
在做高德地图的时候,发现列表点击编辑的时候,地图不能实时更新: <el-form-item label="门店坐标:" :label-width="formLabe ...
- Hbase PleaseHoldException错误
PleaseHoldException ① 原因:(由于正在操作Hbase时,电脑突然关机,未正常关闭hbase,故导致shell无法正常显示)如下图: ②解决过程: 先在网上百度到了使用https: ...
- Java compare方法和compareTo方法
Java Comparator接口排序用法,详细介绍可以阅读这个链接的内容:https://www.cnblogs.com/shizhijie/p/7657049.html 对于 public int ...
- 51nod 1287: 加农炮 好题啊好题
1287 加农炮 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个长度为M的正整数数组A,表示从左向右的地形高度. ...