其他
select * 的八宗罪
链接:https://juejin.cn/post/6938015423275204644
你经常可以在网上看到总有一些人会给你说不要使用 select,而是使用具体的列名代替,而且他们也给出了一部分理由。
第一宗罪:不必要的 IO
select colunm_a,column_b(select * from XXX) tmp
第二宗罪:增加了网络负担
第三宗罪:占用了更多内存
第四宗罪:对 ResultSet 上列顺序的依赖
第五宗罪:视图绑定
在数据库设计过程中,我们经常会有这样的情况下:
某个基础表会被多个视图或者存储过程引用。
修改基础表的时候,我们必须小心翼翼地,因为不会有任何提示告诉我们,如果继续修改,会不会造成视图或者存储过程有问题。
即便我们知道有问题,我们也没有办法去让视图和存储过程刷新得到表最新的信息。
第六宗罪:关联冲突(Conflict in JOIN)
第七宗罪:拷贝数据
第八宗罪:拒绝了使用覆盖索引的可能性
总结
不使用 select
①浪费了时间
②浪费了资源
③增加了系统出 Bug 的可能性
程序正确运行数据不对
程序报错
程序运行结果不确定
为什么有人会使用 select * 呢
①珍惜时间
②减少 SQL 解析器的工作
往期推荐