优化前:

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()优化的更多相关文章

  1. mysql order by rand() 优化方法

    mysql order by rand() 优化方法 适用于领取奖品等项目<pre>mysql> select * from user order by rand() limit 1 ...

  2. 【MySQL性能优化】改进MySQL Order By Rand()的低效率

    <a href="http://click.aliyun.com/m/9153/">点击查看原文</a> 正 文:   最近由于需要研究了一下MYSQL的随 ...

  3. MySQL Order By Rand()效率

    最近由于需要大概研究了一下MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RA ...

  4. MySQL 中随机抽样:order by rand limit 的替代方案

    最近由于需要大概研究了一下MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RA ...

  5. 一次 group by + order by 性能优化分析

    一次 group by + order by 性能优化分析 最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家 ...

  6. 聊聊order by rand()

    总结写在前面: 1. 不建议直接使用order by rand(),原因是执行代价比较大 2. 介绍了内存临时表,对于内存临时表,由于回表不需要访问磁盘,所以往往是用rowid排序,可以减少参与排序字 ...

  7. MySQL的Order By Rand()的效率问题

    MySQL很多时候需要获取随机数据,举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是: 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在OR ...

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

    MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机 ...

  9. ORDER BY RAND()

    大概是因为需要研究了一下MYSQL随机样本实现.例如:离tablename表随机抽取了创纪录,我们一般的写法是:SELECT * FROM tablename ORDER BY RAND() LIMI ...

随机推荐

  1. Redis 详解 (二) redis的配置文件介绍

    目录 1.开头说明 2.INCLUDES 3.MODULES 4.NETWORK 5.GENERAL 6.SNAPSHOTTING 7.REPLICATION 8.SECURITY 9.CLIENTS ...

  2. Machine Learning Note Phase 1( Done!)

    Machine Learning 这是第一份机器学习笔记,创建于2019年7月26日,完成于2019年8月2日. 该笔记包括如下部分: 引言(Introduction) 单变量线性回归(Linear ...

  3. RabbitMQ整合Spring Booot【消费者补偿幂等问题】

    如果消费者 运行时候 报错了 package com.toov5.msg.SMS; import org.springframework.amqp.rabbit.annotation.RabbitHa ...

  4. JAVA - SpringBoot项目引用MyBatis操作数据库

    JAVA - SpringBoot项目引用MyBatis操作数据库 1. 创建SpringBoot项目,参考:https://www.cnblogs.com/1285026182YUAN/p/1232 ...

  5. 实验吧-密码学-这里没有key(VBScript脚本加密)

    打开网页,查看源代码,发现一段乱码,这就是加密后的密文. #@~^TgAAAA=='[6*liLa6++p'aXvfiLaa6i[[avWi[[a*p[[6*!I'[6cp'aXvXILa6fp[:6 ...

  6. AI 人工智能产业园路口-----dp

    北京市商汤科技开发有限公司建立了新的 AI 人工智能产业园,这个产业园区里有 nn 个路口,由 n - 1n−1 条道路连通.第 ii 条道路连接路口 u_iui​ 和 v_ivi​. 每个路口都布有 ...

  7. mark LINUX_6.8 python_2.6.6 setup版本升级 python 2.7.9 安装 pip 临时使用国内镜像源库 指定模块版本 删除指定模块

    简单但却又经常需要使用  网上  贴子也很多  也经常用  所以 做个mark 吧: 1首先下载python2.7.9 源tar包 源码安装 可利用linux自带下载工具wget下载,如下所示:   ...

  8. HDU - 4082 Hou Yi's secret

    题意:射箭落在n个点,任取三点可构成一个三角形,问最大的相似三角形集(一组互相相似的三角形)的个数. 分析: 1.若n个点中有相同的点,要去重,题目中说射箭会形成洞,任选三个洞构成三角形,因此射在同一 ...

  9. 简单看看LongAccumulator

    上篇博客我们看了AtomicLong和LongAdder的由来,但是有的时候我们想一下,LongAdder这个类也有点局限性,因为只能是每一次都+1,那有没有办法每次+2呢?或者每次乘以2?说得更抽象 ...

  10. Spring注解——@Transactional

    @Transactional    用于service实现类,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务.(未完待续)