mysql select * 与 select 具体字段 到底哪个快?自己测试的时候都是 select * 快
1
Alchemistboy 2021-12-09 14:25:56 +08:00
你的 [具体字段] 如果有索引,where 里面用这个索引查询,不用回表,会更快
|
2
zxxufo008 2021-12-09 14:28:03 +08:00
你测试的数据量有多少呢,字段有多少个呢?
|
3
labulaka521 2021-12-09 14:32:04 +08:00
这要看索引吧
|
4
tinyTot OP 字段一共 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; |
5
westoy 2021-12-09 14:39:48 +08:00
原则上肯定是后面那个啊, 后面那个就算不走索引, 前面那个也包含了这些无索引的字段, 一样快不了的
但是如果每次查询的字段不一样,但是都只是差在小字段上, 前面那个命中 query cache 的概率更高一点, 这样反而会反杀后面那个 |
6
tinyTot OP 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 |
7
cheng6563 2021-12-09 15:33:01 +08:00
请问 select * 和 SELECT * 哪个块?
|
8
tinyTot OP 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 考虑到还有网络传输,最终决定还是指定字段查询 不过对于这个问题还是有点疑惑 |
9
weizhen199 2021-12-09 16:00:45 +08:00
select 某个字段恒<= select * 的速度
|
10
qq1340691923 2021-12-09 16:02:10 +08:00
列式存储数据库就可以看出明显差异了
|
11
MonkeyJon 2021-12-09 16:15:13 +08:00
explain 你的 sql ,分析执行计划,看用到的索引和查询条数
|
12
weizhen199 2021-12-09 16:16:38 +08:00
@qq1340691923 数据结构不一样,这两个放在一起比较很不公平的
|
13
onhao 2021-12-09 16:52:58 +08:00
select 具体字段
不接受反驳! #8 还要考虑到返回的数据量 ,还有就是 * 和具体字段 ,执行速度(时间)要排除缓存的因素,在数据量大的情况下最好是指定字段 ,如果是单条数据 ,无所谓 mysql 函数的应用 不知楼主有兴趣了解下不 https://wuhao.pw/archives/277/ @tinyTot |
14
tabris17 2021-12-09 16:57:16 +08:00
select 具体字段比 select *只快不慢
如果覆盖索引速度会非常快 |
15
xsm1890 2021-12-09 17:28:36 +08:00 1
select 字符按和 select * 在查询过程的主要区别在于数据页加再到内存后到返回客户端间的这段时间的区别;即为网络传输时间和决定具体返回的数据的时间之和的差别。网络传输毫无疑问 select *>=select 字段;由于数据页的结构是一个 稀疏目录,只能顺序查找,所以根据返回的具体数据的区别,select *所需的时间可能更快(返回整页数据的时候)也可能 能更慢。
所以具体谁更快?还真不好说。 |
16
RedBeanIce 2021-12-09 18:46:05 +08:00 via iPhone
请了解 explain ,覆盖索引,以及 sql 代码*和字段的兼容性
|
17
akira 2021-12-09 19:21:04 +08:00
字段数量少,总长小的时候 没啥区别。 字段数量或者总长度上去以后,select * 能让你怀疑人生
|
18
akira 2021-12-09 19:22:17 +08:00
另外,select 具体字段 应该是规范要求,一般开发都不会允许使用 select *的吧
|
19
msaionyc 2021-12-09 21:07:38 +08:00 via iPhone
去学下索引吧,不然大家说再多你也还是听不明白
|