对开发来说都是 select * 的。因为有时候,你 select a,b 你开发的时候没有问题,当你的逻辑又要用到 c 时,你可能就不记的 select 加上 c ,,排查了好久。不知道为什么。。
还有就是关联的时候,如果关联字段没有加上,你也会关联不出来的。
当然你 select * 你返回 API 时不一定返回所有字段。你可以使用 api 资源返回前端想要的字段。
反正我跟我同事说,你开发偷懒就 select * ,如果你是一个代码洁癖。你就自已写。我觉的中小企业数据量可以完全不计
一个是有无效网络传输
一个是有些情况不能索引覆盖(都 select * 了 估计也没考虑过覆盖吧)
感觉最重要的是 innodb 的 buffer 的刷新覆盖,造成 buffer 中大量的无效数据(有大字段的话会比较明显)
之前找工作时,面试官问我一个问题:select 某些字段 为什么比 select * 快。我的回答:查询的字段少自然比查询所有字段快。最后,面试官给的回答是:其实这两个查询速度基本一样,之所以快是因为数据量小网络传输快 不知道大家认不认同?
这个要看你的查询条件使用到的索引类型。如果以主键为条件,那是一样的,因为查主键用到的是聚簇索引,聚簇索引的结构是 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 类型,用来存放文章内容的,
在全部取出,你可以考虑下网络带宽的问题
推荐文章: