查询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);
我也不知道我在干什么。几毫秒的区别,当作误差都可以,虽然我已经无聊到测试了好几次,确认不是误差了