面试官:“小程,说一下你常用的SQL优化方式吧。”
程序猿小一:“那很多啊,比如不要用SELECT *,查询效率低。巴拉巴拉…”
面试官:“为什么不要用SELECT * ?它在哪些情况下效率低呢?”
程序猿小一:“SELECT * 它好像比写指定列名多一次全表查询吧,还多查了一些无用的字段。”
面试官:“嗯…”
程序猿小一:“emmm~ 没了”
程序猿小一:“…??(几个意思)”
面试官:“嗯…好,那你还有什么要问我的么?”
程序猿小一:“我问你个锤子,把老子简历还我!
无论在工作还是面试中,关于SQL中不要用“SELECT *”,都是大家听烂了的问题,虽说听烂了,但普遍理解还是在很浅的层面,并没有多少人去追根究底,探究其原理。
废话不多说,本文带你深入了解一下"SELECT * "效率低的原因及场景。
一、效率低的原因
先看一下最新《阿里java开发手册(泰山版)》中 MySQL 部分描述:
【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。
说明:
增加查询分析器解析成本。
增减字段容易与 resultMap 配置不一致。
无用字段增加网络 消耗,尤其是 text 类型的字段。
开发手册中比较概括的提到了几点原因,让我们深入一些看看:
1. 不