mysql添加索引和不添加索引的区别及说明
更新时间:2024年01月27日 16:41:21 作者:Ense
这篇文章主要介绍了mysql添加索引和不添加索引的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作方法
Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设,这篇文章主要给大家介绍了关于Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作的相关资料,需要的朋友可以参考下2023-11-11MySQL+Redis缓存+Gearman共同构建数据库缓存的方法
这篇文章主要介绍了MySQL+Redis缓存+Gearman共同构建数据库缓存,部署后在MySQL端进行创建一个用户给与远程登录权限,使得Redis作为缓存可以用来同步数据使用,需要的朋友可以参考下2022-10-10如何获取SqlServer2005表结构(字段,主键,外键,递增,描述)
本篇文章是对如何获取SqlServer2005表结构(字段,主键,外键,递增,描述)的方法进行了详细的分析介绍,需要的朋友参考下2013-06-06
最新评论