mysql添加索引和不添加索引的区别

在工作中遇到记录日志的表查询慢问题,定位到该sql语句后发现是一个非常简单的select查询:

SELECT
    t.id,
    t.job_group,
    t.job_id,
    t.executor_address,
    t.executor_handler,
    t.executor_param,
    t.executor_sharding_param,
    t.executor_fail_retry_count,
    t.trigger_time,
    t.trigger_code,
    t.trigger_msg,
    t.handle_time,
    t.handle_code,
    t.handle_msg,
    t.alarm_status
FROM
    xxl_job_log AS t
WHERE
t.trigger_time >= '2020-01-01 00:00:00.0'
AND 
t.trigger_time <= '2020-01-01 23:59:59.0'
 AND
alarm_status = 0
ORDER BY
t.trigger_time DESC
LIMIT 0,
 10

查询目前表数据条数:八百多万条数据

通过使用explain 定位看到:

查询类型:全表扫描

扫描条数:7889316

执行sql耗时:9.563s

经过对sql的定位发现,只要加上trigger_time时间过滤查询,查询速度就会变的非常慢,当去掉

t.trigger_time >= '2020-01-01 00:00:00.0'
AND 
t.trigger_time <= '2020-01-01 23:59:59.0'

ORDER BY
t.trigger_time DESC

后在执行sql:0.002s

因此知道时间都花在了时间过滤的动作上,于是对trigger_time做了索引操作:

ALTER TABLE xxl_job_log ADD INDEX index_job_time (trigger_time)

在使用explain查看select执行情况:

扫描范围:局部

扫描条数:694454

执行sql耗时:0.002s

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值