关系数据库中select * 真的会比select xxx慢吗?

关系数据库是行存储,即使不用那一列,也会从存储读取到内存。所以 select * 并不会比 select xxx 慢。

code one
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 15
wanghan

不是吧?怎么和我学的不一样

4年前 评论
流浪剑客

=。= 我个人看法是多数情况是不需要获取所有列的数据的,没有用到的数据就不取出来,而且 select * 是不会出现索引覆盖的

4年前 评论

个人看法,mysql 对于还是 xxx 的执行速度是一样的,之所以不用, 是为了减少无关数据的网络传送

4年前 评论

等你的表字段多的时候你就会知道哪个快慢了

4年前 评论
欧皇降临 4年前

对开发来说都是 select * 的。因为有时候,你 select a,b 你开发的时候没有问题,当你的逻辑又要用到 c 时,你可能就不记的 select 加上 c ,,排查了好久。不知道为什么。。

还有就是关联的时候,如果关联字段没有加上,你也会关联不出来的。

当然你 select * 你返回 API 时不一定返回所有字段。你可以使用 api 资源返回前端想要的字段。

反正我跟我同事说,你开发偷懒就 select * ,如果你是一个代码洁癖。你就自已写。我觉的中小企业数据量可以完全不计

4年前 评论
loveinalife (楼主) 4年前

一个是有无效网络传输

一个是有些情况不能索引覆盖(都 select * 了 估计也没考虑过覆盖吧)

感觉最重要的是 innodb 的 buffer 的刷新覆盖,造成 buffer 中大量的无效数据(有大字段的话会比较明显)

4年前 评论

之前找工作时,面试官问我一个问题:select 某些字段 为什么比 select * 快。我的回答:查询的字段少自然比查询所有字段快。最后,面试官给的回答是:其实这两个查询速度基本一样,之所以快是因为数据量小网络传输快 :joy: 不知道大家认不认同?

4年前 评论
miaotiao 4年前

这个要看你的查询条件使用到的索引类型。如果以主键为条件,那是一样的,因为查主键用到的是聚簇索引,聚簇索引的结构是 B + 树,其叶子节点保存了每天记录的完整字段。

如果条件是二级索引,比如,有 c1,c2 组成的联合索引,这时 select c1,c2 from table where c1=xx 就比 select * …. 要快,因为前面的不用回表 (二级索引的 B + 树叶子节点只保存了主键 + 索引列,查询的字段的如果不包含在叶子节点的数据里面,就需要通过查到的主键回表再查一次)。
当然,有个大前提是使用 INNODB 引擎。

4年前 评论

mysql 会把 select * from table 转换成 select xx1, xx2,xx3 from table

  • 少了转换步骤

假如 xx2 是 text 类型,用来存放文章内容的,
在全部取出,你可以考虑下网络带宽的问题

4年前 评论

我还是那句话,select xxx,在增减字段时还要去改代码,关键你不知道哪些地方要改!!!

另外:select * 字段多?大字段?那你表设计就有问题。

4年前 评论
fatrbaby
  1. 某些字段不是直接存储的,需要额外的 IO 操作(如 TEXT/BLOB)
  2. 查出的数据越大,网络传输时的开销越大,网络也是 IO。
4年前 评论

我觉得从数据库的角度来说的话,最敏感的就是 I/O 操作 * 可能会带来 I/O 操作的增加,所以个人认为尽量不用为好

4年前 评论

字段少几乎无差别的~~索引、忌用语句才是关键呵呵

4年前 评论