对开发来说都是select * 的。因为有时候,你select a,b 你开发的时候没有问题,当你的逻辑又要用到c时,你可能就不记的select 加上c ,,排查了好久。不知道为什么。。
还有就是关联的时候,如果关联字段没有加上,你也会关联不出来的。
当然你select * 你返回API时不一定返回所有字段。你可以使用api资源返回前端想要的字段。
反正我跟我同事说,你开发偷懒就select * ,如果你是一个代码洁癖。你就自已写。我觉的中小企业数据量可以完全不计
一个是有无效网络传输
一个是有些情况不能索引覆盖(都select * 了 估计也没考虑过覆盖吧)
感觉最重要的是innodb的buffer的刷新覆盖,造成buffer中大量的无效数据(有大字段的话会比较明显)
之前找工作时,面试官问我一个问题:select 某些字段 为什么比 select * 快。我的回答:查询的字段少自然比查询所有字段快。最后,面试官给的回答是:其实这两个查询速度基本一样,之所以快是因为数据量小网络传输快 :joy: 不知道大家认不认同?
这个要看你的查询条件使用到的索引类型。如果以主键为条件,那是一样的,因为查主键用到的是聚簇索引,聚簇索引的结构是B+树,其叶子节点保存了每天记录的完整字段。
如果条件是二级索引,比如,有c1,c2组成的联合索引,这时select c1,c2 from table where c1=xx就比 select * …. 要快,因为前面的不用回表(二级索引的B+树叶子节点只保存了主键+索引列,查询的字段的如果不包含在叶子节点的数据里面,就需要通过查到的主键回表再查一次)。
当然,有个大前提是使用INNODB引擎。
mysql 会把 select * from table 转换成 select xx1, xx2,xx3 from table
- 少了转换步骤
假如 xx2 是 text 类型,用来存放文章内容的,
在全部取出,你可以考虑下网络带宽的问题
推荐文章: