mysql select * 与 select 具体字段 到底哪个快?

2021-12-09 14:21:52 +08:00
 tinyTot

mysql select * 与 select 具体字段 到底哪个快?自己测试的时候都是 select * 快

3897 次点击
所在节点    MySQL
19 条回复
Alchemistboy
2021-12-09 14:25:56 +08:00
你的 [具体字段] 如果有索引,where 里面用这个索引查询,不用回表,会更快
zxxufo008
2021-12-09 14:28:03 +08:00
你测试的数据量有多少呢,字段有多少个呢?
labulaka521
2021-12-09 14:32:04 +08:00
这要看索引吧
tinyTot
2021-12-09 14:36:31 +08:00
字段一共 15 个; 数据量 80 万左右; sql 里面只有主键索引;
order by id 不如 order by created_at 快
select * 比 select 具体字段快
不知道是不是 select * mysql 有相关查询缓存的原因

SELECT `id`, `no`, `amount`, `type`, `note`, `created_at` FROM `charge` WHERE `uid` = 11 ORDER BY `created_at` DESC LIMIT 15 OFFSET 0;

SELECT * `charge` WHERE `uid` = 11 ORDER BY `id` DESC LIMIT 15 OFFSET 0;
westoy
2021-12-09 14:39:48 +08:00
原则上肯定是后面那个啊, 后面那个就算不走索引, 前面那个也包含了这些无索引的字段, 一样快不了的

但是如果每次查询的字段不一样,但是都只是差在小字段上, 前面那个命中 query cache 的概率更高一点, 这样反而会反杀后面那个
tinyTot
2021-12-09 15:05:16 +08:00
show variables like '%query_cache%';

have_query_cache YES
query_cache_limit 1048576
query_cache_min_res_unit 4096
query_cache_size 0
query_cache_type OFF
query_cache_wlock_invalidate OFF



show status like 'Qcache%';

Qcache_free_blocks 0
Qcache_free_memory 0
Qcache_hits 0
Qcache_inserts 0
Qcache_lowmem_prunes 0
Qcache_not_cached 5036
Qcache_queries_in_cache 0
Qcache_total_blocks 0
cheng6563
2021-12-09 15:33:01 +08:00
请问 select * 和 SELECT * 哪个块?
tinyTot
2021-12-09 15:57:57 +08:00
1 、指定的 uid 数据量在 300 条时,经常查询的一个用户,指定字段的速度=0.122; * 的速度=0.217
1 、指定的 uid 数据量在 300 条时,不经常查询的一个用户,指定字段的速度=0.311; * 的速度=0.210
2 、指定的 uid 数据量在小于 15 条时,不经常查询的一个用户,指定字段的速度=0.456; * 的速度=0.217

在增加 uid 的索引后,两条 sql 查询时间 大致都在 0.02x

考虑到还有网络传输,最终决定还是指定字段查询

不过对于这个问题还是有点疑惑
weizhen199
2021-12-09 16:00:45 +08:00
select 某个字段恒<= select * 的速度
qq1340691923
2021-12-09 16:02:10 +08:00
列式存储数据库就可以看出明显差异了
MonkeyJon
2021-12-09 16:15:13 +08:00
explain 你的 sql ,分析执行计划,看用到的索引和查询条数
weizhen199
2021-12-09 16:16:38 +08:00
@qq1340691923 数据结构不一样,这两个放在一起比较很不公平的
onhao
2021-12-09 16:52:58 +08:00
select 具体字段
不接受反驳!

#8 还要考虑到返回的数据量 ,还有就是 * 和具体字段 ,执行速度(时间)要排除缓存的因素,在数据量大的情况下最好是指定字段 ,如果是单条数据 ,无所谓

mysql 函数的应用 不知楼主有兴趣了解下不 https://wuhao.pw/archives/277/
@tinyTot
tabris17
2021-12-09 16:57:16 +08:00
select 具体字段比 select *只快不慢
如果覆盖索引速度会非常快
xsm1890
2021-12-09 17:28:36 +08:00
select 字符按和 select * 在查询过程的主要区别在于数据页加再到内存后到返回客户端间的这段时间的区别;即为网络传输时间和决定具体返回的数据的时间之和的差别。网络传输毫无疑问 select *>=select 字段;由于数据页的结构是一个 稀疏目录,只能顺序查找,所以根据返回的具体数据的区别,select *所需的时间可能更快(返回整页数据的时候)也可能 能更慢。
所以具体谁更快?还真不好说。
RedBeanIce
2021-12-09 18:46:05 +08:00
请了解 explain ,覆盖索引,以及 sql 代码*和字段的兼容性
akira
2021-12-09 19:21:04 +08:00
字段数量少,总长小的时候 没啥区别。 字段数量或者总长度上去以后,select * 能让你怀疑人生
akira
2021-12-09 19:22:17 +08:00
另外,select 具体字段 应该是规范要求,一般开发都不会允许使用 select *的吧
msaionyc
2021-12-09 21:07:38 +08:00
去学下索引吧,不然大家说再多你也还是听不明白

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

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

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

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

© 2021 V2EX