慢SQL的原因

查询SQL慢就一定是sql语句的原因吗?不一定!
 看我这条SQL。

  • execution: 75 ms 表示 SQL 查询的执行时间是75毫秒。
  • fetching: 9 s 156 ms 表示从数据库获取数据到客户端的时间是9秒156毫秒。
    所以主要的耗时都在数据获取上了,考虑的方式是
     
  • 网络优化:检查和优化客户端和数据库服务器之间的网络连接。
  • 减少数据量:如果可能,减少查询返回的数据量,例如通过限制结果集的大小或只返回必要的列。
  • 客户端处理:优化客户端应用程序处理查询结果的方式,以减少获取数据的时间。

但是这里还是让我发现了一个神奇的地方。因为我是建立了索引覆盖的,但是MySQL优化器默认选择了走的idx_state的单列索引,而没有用我的索引覆盖。

我最开始以为是我state数据量很集中,所以单列索引更快。但是索引覆盖不需要回表啊,按照我朴素的价值观,我测试了一下,使用

 use index (idx_state_lat_lon_id)推荐Mysql考虑索引覆盖

发现索引覆盖耗时108 ms,走单列索引耗时109 ms。基本上没差别,有可能是我state都是2的原因。我再试了试修改几条数据的state。


现在差距明显了一点点,但是优化器还是选择了单列索引,不知道为什么哈,有没有懂哥解释一下,索引覆盖不是还不用回表,减少了IO吗?


这是我的建立索引语句

ALTER TABLE gd_poi_info_5 ADD INDEX idx_state (state);
CREATE INDEX idx_state_lat_lon_id ON gd_poi_info_5(state, latitude, longitude, id);

我也不知道我在干什么。几毫秒的区别,当作误差都可以,虽然我已经无聊到测试了好几次,确认不是误差了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值