https://www.cnblogs.com/MrYuChen-Blog/p/13936680.html
- 使用 * 号查询,会查询出多个我们不需要的字段,增加 SQL 执行时间,同时大量的多余字段,会增加网络开销。
- 对于无用的大字段,如 varchar、blob、text,会增加 io 操作。
- 失去MySQL优化器“覆盖索引”策略优化的可能性
- 使用 * 号查询,会查询出多个我们不需要的字段,增加 SQL 执行时间,同时大量的多余字段,会增加网络开销。
- 用 “SELECT *” 数据库需要解析更多的对象、字段、权限、属性等相关内容,在 SQL 语句复杂,硬解析较多的情况下,会对数据库造成沉重的负担。
- “SELECT *” 经常会带上无用且大文本字段(比如LOG,),当出现这种情况时,对于网络开销来说,是一种巨大的负担,甚至网络开销会几何倍数增加,另外如果 DB 和应用程序不在同一台机器,这种开销非常明显
- 即使 MySQL 服务器和客户端是在同一台机器上,使用的协议还是 tcp,通信也是需要额外的时间。
- 对于无用的大字段,如 varchar、blob、text,会增加 io 操作
- 准确的来说,长度超过 728 字节的时候,会先把超出的数据序列化到另外一个地方,因此读取这条记录会增加一次 io 操作。(MySQL InnoDB)
- 失去MySQL 优化器“覆盖索引”策略优化的可能性
SELECT * 杜绝了覆盖索引的可能性,而基于MySQL优化器的“覆盖索引”策略又是速度极快,效率极高,业界极为推荐的查询优化方式。
例如:有一个表为t(a,b,c,d,e,f),其中,a为主键,b列有索引。
- 这种情况,首先我们要搞明白,mysql会给我们创建那些索引;