暂无图片
请问带时间字段的慢sql怎么优化
我来答
分享
czxin788
2020-05-12
请问带时间字段的慢sql怎么优化

本帖最后由 czxin788 于 2020-5-12 15:03 编辑


explain SELECT
    -> id,
    -> customer_id,
    -> send_customer_id,
    -> send_customer_name,
    -> send_site_id,
    -> message_type,
    -> op_type,
    -> ref_type,
    -> ref_id,
    -> ref_review_id,
    -> message_name,
    -> message_body,
    -> create_time,
    -> read_time,
    -> is_read,
    -> read_site_id,
    -> is_remind,
    -> sort_id,
    -> is_valid,
    -> resource_type,
    -> ios_send_time,
    -> android_send_time,
    -> wx_send_time,
    -> notify_config_id,
    -> message_src_time,
    -> is_permit,
    -> page_storage_path,
    -> web_storage_path,
    -> app_storage_parh
    ->  FROM customer_message
    ->  WHERE 1=1
    -> and op_type in
    ->  (  
    -> '121'
    ->  ,
    -> '123'
    ->  )
    -> and create_time >= '2018-05-17 15:35:46.0'
    ->  limit 0, 9223372036854775807;
+----+-------------+------------------+------------+------+----------------+------+---------+------+---------+----------+-------------+
| id | select_type | table            | partitions | type | possible_keys  | key  | key_len | ref  | rows    | filtered | Extra       |
+----+-------------+------------------+------------+------+----------------+------+---------+------+---------+----------+-------------+
|  1 | SIMPLE      | customer_message | NULL       | ALL  | idx_createtime | NULL | NULL    | NULL | 1536673 |    10.00 | Using where |
+----+-------------+------------------+------------+------+----------------+------+---------+------+---------+----------+-------------+
1 row in set, 1 warning (0.00 sec)



show index from customer_message;
+------------------+------------+---------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table            | Non_unique | Key_name                  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+------------------+------------+---------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| customer_message |          0 | PRIMARY                   |            1 | id          | A         |     1475167 |     NULL | NULL   |      | BTREE      |         |               |
| customer_message |          1 | idx_createtime            |            1 | create_time | A         |      714707 |     NULL | NULL   | YES  | BTREE      |         |               |
| customer_message |          1 | idx_customer_ref_id_multi |            1 | customer_id | A         |      125866 |     NULL | NULL   | YES  | BTREE      |         |               |
| customer_message |          1 | idx_customer_ref_id_multi |            2 | ref_id      | A         |      752687 |     NULL | NULL   | YES  | BTREE      |         |               |
+------------------+------------+---------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
4 rows in set (0.00 sec)





select count(distinct op_type) from customer_message;
+-------------------------+
| count(distinct op_type) |
+-------------------------+
|                      76 |
+-------------------------+
1 row in set (0.88 sec)


请问,上面的慢sql应该怎么优化好呢

复制
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
文成

看起来这个表数据量比较大,从执行计划来看走的是全表扫描,因为没有合适的索引
可以考虑对这个表进行按照时间进行分区
并对 op_type 增加联合索引
同时需要考虑业务的合理性 是否需要返回这么多字段和这么多行的数据?

暂无图片 评论
暂无图片 有用 0
打赏 0
黄伟波

看一下customer_message表结构

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
mysql8 datetime字段不能插入空值,有什么办法解决吗?
回答 1
select@@sqlmode看有没有 NOZEROINDATE,NOZERODATE 有的话把那串字符串copy 出来 删除上面两项。然后再SETGLOBAL
MySQL参数wait_timeout和interactive_timeout的作用和区别是什么?
回答 1
已采纳
interactivetimeout表示MySQL服务器关闭交互式连接前等待活动的秒数,waittimeout表示MysQL服务器关闭非交互连接之前等待活动的秒数。这二个参数的默认值都是28800秒。
mysql如何判断一个表中是否有数据?
回答 1
select一下
MySQL 漏洞处理版本升级到最新小版本,还有漏洞, 是不是必须打补丁?
回答 2
已采纳
不一定,这个东西还是要做具体分析的,漏洞肯定是都有的,但是危害程度有大有小,我们一般是遵照以下准则:a、  对于致命级别的安全漏洞补丁,应立即更新;b、对于bug修复类补丁,若涉及
default-character-set 在8.0中默认是utf8mb4,在5.7中对应的功能相同的参数是什么?
回答 1
[client]port7306defaultcharactersetutf8mb4 客户端默认字符集[mysqld]port7306charactersetserverutf8mb4&nb
digest,dumpslow工具如何分析一个时间段的慢日志??
回答 1
在MySQL中,可以使用 ptquerydigest 和 mysqldumpslow 工具来分析特定时间段的慢查询日志。以下是具体步骤:一、使用 pt
MySQL最近是否有发布过重大安全漏洞升级通知, 除了从Release notes看 ,还可以在那里查看?
回答 2
已采纳
oracle每季度会发布有关安全的CriticalPatchUpdateshttps://www.oracle.com/securityalerts/
mysql position会在什么情况下丢失?
回答 1
MySQLPOSITION()函数可以在字符串中查找一个子字符串的位置。如果无法在原始字符串中查找到子字符串,则返回0。至于为什么会丢失位置,这取决于您的具体情况。例如,如果您的MySQL服务器出现故
mysql数据库update操作的疑问
回答 1
当Oracle表被重命名后,原表上的执行计划不会自动失效。但是,如果你在重命名后的表上创建了新的索引或者修改了表结构,那么原来的执行计划可能会跑偏。如果原表上已经固化了执行计划,那么在重命名后的表上执
MySQL Innodb存储引擎存储引擎状态报告中spin为什么会持续占用cpu?
回答 1
MySQL使用了自旋锁(spinlock),它本质上是一个非阻塞锁,也就是说,如果某线程需要获取锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的消耗CPU的时间,不停的试图获取锁。频繁的