请教一个 MySQL 的问题

17 天前
 dumbbell5kg

这有两条 SQL 与各自稳定的执行时间,表记录是 1000w 条,平均单条记录大小 700b

SELECT * FROM `user_operation_log` 	  LIMIT 1000000, 1; 0.3s
SELECT user_id FROM `user_operation_log` LIMIT 1000000, 1; 0.5s

为什么 SELECT user_id 比 select * 快这么多?

两者执行计划的 type 都是 all 。

期待大佬答复。

1466 次点击
所在节点    MySQL
26 条回复
dumbbell5kg
17 天前
我认为两者的时间是花在了扫描前 100w 条记录上,扫描过程中把完整的数据页读到内存的,这个读数据页的过程对于两 SQL 来说是一样的,不明白为什么差了这么多。
iminto
17 天前


对于 SQL 这种相对黑盒,你这差距不到 50%,没必要浪费时间纠结。

当有几倍或者几十,几百倍差距的时候,才是值得你去思考的时候。
dumbbell5kg
17 天前
@iminto 面向面试纠结....
Sawyerhou
17 天前
没明白哪个快,时间标的是 * 快,问题描述说 user_id 快,
mysql 底层对 * 有优化吧,一般情况下没加 index 时 * 应该快一点?
dumbbell5kg
17 天前
@Sawyerhou 是 user_id 快,不好意思
sagaxu
17 天前
EXPLAIN ANALYZE SELECT * FROM `user_operation_log` LIMIT 1000000, 1;
EXPLAIN ANALYZE SELECT user_id FROM `user_operation_log` LIMIT 1000000, 1;

看看输出有无区别
lesismal
17 天前
先搞清楚要对比的是什么, 如果是 count(*) 对比 count(user_id) 是有可比性的, 但 select * 对比 select user_id, 每条 700B vs 每条数据最多 8B, 单说拷贝 100w 条数据的量就性能差别巨大了所以二者根本没有可比性
dumbbell5kg
17 天前
@lesismal "每条 700B vs 每条数据最多 8B, 单说拷贝 100w 条数据的量就性能差别巨大了"
你是说读数据页到内存的时候,能只读这个数据页上多条记录的某个字段,比如 userId ?
dumbbell5kg
17 天前
@sagaxu 我是 MySQL5.7 ,没有 ANALYZE 这个用法,不过两者的 EXPLAIN 结果是一样的
dumbbell5kg
17 天前
@lesismal LIMIT 1000000, 1 = LIMIT 1 offset 1000000
如果你指的是说传输到客户端的话,要传输的只有一条
weijancc
17 天前
我之前测试过, 因为 select *返回的数据更多, 这也影响了速度, 如果你是本地 MySQL, 那就区别不大
0xD800
17 天前
加个 Order By 更加面向面试学习
oneisall8955
17 天前
user_id 有索引的话,select * 要回表
yuLiong
16 天前
一个是找到全班第十个小朋友的名字就好,一个是还得去班上看看今天小朋友穿什么衣服。
dumbbell5kg
16 天前
@oneisall8955 没有索引
dumbbell5kg
16 天前
@weijancc 我本地虚拟机里的 MySQL ,"因为 select *返回的数据更多"是指返回给客户端更多? 一条 700b 数据的传输用不到 0.2s
dumbbell5kg
16 天前
@oneisall8955 回表是因为走二级索引拿不全数据,这里没走索引,没有回表的因素呀
RangerWolf
16 天前
user_id 是索引嘛? 如果是索引列,那么扫描的东西可能就完全不一样了。
dumbbell5kg
16 天前
@RangerWolf 不是索引。。怎么感觉大家对 type=all 不太熟呀,这个不是全表扫描不走索引的意思吗,还是我理解错 type=all 了
tinyzilan123
16 天前
可以做个测试,select * 使用不同数目的 column 量,看对比,可以判断是不是数据量拷贝大造成的时间差异。
例如 select user_id, select 10 个 column, select 50 个 column 等等

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1048143

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX