2020-07-24
mysql sql优化
SELECT
account_name,
FROM_UNIXTIME(
ROUND(request_time / 1000),
‘%Y-%m-%d’
) date,
country_number,
SUM(
IF ( need_resend = '0', message_size, 0 ) ) AS send, SUM( CASE message_result WHEN 'DELIVRD' THEN message_size ELSE 0 END ) 'success', SUM( CASE message_result WHEN '' THEN message_size ELSE 0 END ) AS 'unknown', SUM( IF ( message_result = 'DELIVRD' OR ( message_result = '' AND need_resend = '0' ), (price) *- 1, 0 ) ) AS fee FROM send_message WHERE request_time >= 1595433600000 AND request_time <= 1595519999999 GROUP BY message_result, account_name ORDER BY request_time DESC
复制
环境:
centos 7
mysql 5.7.25
表数据量:四千六百万
where结果集:五百一十万
想请问下上面的这个sql应该如何优化?
我的疑惑:
1.从索引角度优化,只能在request_time字段加索引,因为mysql在where中字段进行比较后,后面的字段是不能用到索引的,所以group by的效率不高
2.根据where的request_time查出来的结果集占到表的11%,优化器没有走索引,这个可以通过sql加强制索引解决,但是要改代码,请问还有其他的办法吗?
3.我认为查询字段的处理不合理,但是我把那几个sum的函数去掉之后,查询时间依然没有减少
4.我们经常需要做一段时间内的统计,类似select … from … where xx > … and xx < … order by a,b,请问这种sql应该怎么优化,这个其实和第一点类似,就是在where做了的比较之后,怎样能让group by也提升性能,我目前知道的办法是加上order by null,那sql要是还有其他字段的排序呢,比如第一点的sql
期待有大神能给我解惑,非常感谢!
我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
回答交流
Markdown
请输入正文
提交
相关推荐
MySQL 版本有漏洞,直接升级mysql版本就行了吗?
回答 1
mysql的漏洞是通过版本来修复的,直接升级到不涉及该漏洞的mysql版本就行了
如何实现局域网内的两台电脑的MYSQL数据同步?
回答 3
可以尝试下国内的ETLCloud,提供很多数据集成和转换功能,支持多种数据源的连接和转换操作,包括数据格式转换、数据清洗、字段映射等操作,能够将转换后的数据加载到目标系统中,可视化操作界面,刚进门也能
centos服务器里面的MySQL服务第二天会自动关闭,并且把创建的新数据库删除了是为什么?
回答 4
请问解决了吗,我也是,新手小白求指点
oracle instr函数模糊查询 当第二个参数要匹配的字符串没有传的时候,查询不出来结果,怎么处理?
回答 2
不同的数据库,对于同一个函数,的确会有不一样的情况,你想让这个sql能查出结果,除非修改oracle的标准包,否则就只能换写法
mysql当前写的binlog文件是不能读取,一般怎么做?
回答 1
可以读取的mysqlbinlog可以解析当前binlog文件
TDSQL和MySQL在navicat的连接是一样的吗?
回答 1
已采纳
“TDSQL"目前是一个系列,有好几个数据库名称里都包含"TDSQL”你看你用的是基于哪种数据库的,就可以使用对应数据库的工具来连接
mysql.exe 免费吗?
回答 1
已采纳
mysql有社区版和商业版,其中社区版是免费的,下载地址https://dev.mysql.com/downloads/商业版购买指引https://www.mysql.com/buymysql/
mysql的主流版本是哪个?
回答 1
已采纳
5.7
mysql现在哪个版本用的多?
回答 1
已采纳
5.7和8
mysql8.0 root密码被锁定了,怎么解决?
回答 1
已采纳
建议在配置文件用skipgranttables方式修改密码https://www.modb.pro/db/24271
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~