背景
编程规范中,经常会看到一条,不建议使用 select *
语句,然而实际开发中又屡禁不止,有两个问题:
- 为什么
select *
影响 SQL 性能? - 有多大的影响?
为什么 select * 是低效语句?
主要体现在三个方面:
select *
会让优化器无法使用覆盖索引优化。- 网络开销,这种开销非常明显。
- 额外的 IO / CPU 开销,因为多取了不必要的列。
有多大的影响?
- 测试表信息
1 | mysql> desc salaries; |
- 执行速度对比:查询返回字段越多,耗时越多。
1 | mysql> select * from salaries; |
- 覆盖索引:是可以不用读 data,直接使用 index 里面的值就返回结果。
1 | mysql> desc employees; |