小编典典

不使用select *的原因是什么?

sql

我见过很多人声称您应该在选择查询中专门为想要的每一列命名。

假设我仍然要使用所有列,为什么我不使用SELECT *

即使考虑问题* SQL查询-
从视图选择或从视图*选择col1,col2,’colN
,我也不认为这是完全相同的副本,因为我正从略有不同的观点着手解决这个问题。

我们的原则之一是在优化之前就不进行优化。考虑到这一点,在被证明是资源问题或架构几乎是固定的之前,似乎SELECT *应该使用 首选的
方法。众所周知,只有完成开发后,这种情况才会发生。

就是说,有一个最重要的问题不使用SELECT *吗?


阅读 259

收藏
2021-05-05

共1个答案

小编典典

不进行过早优化的报价的本质是编写简单明了的代码, 然后 使用探查器指出热点,然后可以对其进行优化以提高效率。

当使用select *时,将无法进行概要分析,因此,您没有在编写清晰明了的代码,这与引用的精神背道而驰。select *是反模式。


因此,选择列并不是过早的优化。我头上掉了几件事....

  1. 如果在SQL语句中指定列,则从表中删除该列并执行查询时,SQL执行引擎将出错。
  2. 您可以更轻松地在使用该列的位置扫描代码。
  3. 您应该始终编写查询以带回最少的信息量。
  4. 正如其他人提到的,如果您使用序数列访问,则永远不要使用select *
  5. 如果您的SQL语句联接了表,则选择*将为您提供联接中所有表的所有列

结果是使用select *

  1. 应用程序使用的列是不透明的
  2. DBA及其查询分析器无法帮助您降低应用程序的性能
  3. 发生更改时,代码更加脆弱
  4. 您的数据库和网络正在遭受痛苦,因为它们带来了太多的数据(I / O)
  5. 数据库引擎的优化是最小的,因为您要带回所有数据(逻辑上)。

编写正确的SQL与编写脚本一样容易Select *。因此,真正的懒惰者会编写适当的SQL,因为他们不想重新访问代码,而是想记住自己在执行操作时在做什么。他们不想向DBA解释每一段代码。他们不想向客户解释为什么应用程序像狗一样运行。

2021-05-05