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

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

code one
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 15
wanghan

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

3年前 评论
流浪剑客

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

3年前 评论

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

3年前 评论

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

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

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

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

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

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

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

一个是有无效网络传输

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

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

3年前 评论

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

3年前 评论
miaotiao 3年前

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

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

3年前 评论

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

  • 少了转换步骤

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

3年前 评论

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

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

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

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

3年前 评论

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

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!