为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

九州编程 2019-06-03 13:44:23
不使用SELECT*的原因是什么?我见过许多人声称您应该在SELECT查询中具体地命名您想要的每一列。假设我无论如何都要使用所有的列,我为什么不使用SELECT *?即使考虑到这个问题*SQLQuery-从视图中选择*或选择col1、col2、…柯伦*,我不认为这是一个确切的重复,因为我是从一个稍微不同的角度来处理这个问题。我们的原则之一是在时机成熟之前不进行优化。考虑到这一点,它看起来就像使用SELECT *应该是首选方法,直到它被证明是一个资源问题,或者模式基本上是一成不变的。正如我们所知,在开发完全完成之前,这是不可能发生的。也就是说,是否有一个压倒一切的问题不能使用?SELECT *?
查看完整描述

4 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

“不过早地优化”的引语的实质是使用简单而直接的代码和然后使用分析器指出热点,然后您可以优化这些热点以提高效率。

当您使用SELECT*时,您将无法进行概要分析,因此您并不是在编写清晰而直接的代码,而且您违背了引用的精神。select *是一种反模式。


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

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

其推论是使用select * ...

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

编写正确的sql与编写正确的sql一样容易。Select *..因此,真正懒惰的人编写适当的SQL,因为他们不想重新查看代码,并试图记住他们在执行代码时所做的事情。他们不想向DBA解释每一段代码。他们不想向客户解释为什么应用程序像狗一样运行。


查看完整回答
反对 回复 2019-06-03
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

如果您的代码依赖于以特定顺序排列的列,则当表发生更改时,您的代码将中断。此外,当选择*时,可能会从表中获取太多信息,特别是在表中有二进制字段的情况下。

仅仅因为您现在正在使用所有的列,这并不意味着其他人不会向表中添加额外的列。

它还增加了计划执行缓存的开销,因为它必须获取有关表的元数据,以了解哪些列在*中


查看完整回答
反对 回复 2019-06-03
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

一个主要原因是,如果您从表中添加/删除列,则任何正在进行SELECT*调用的查询/过程现在都将得到比预期更多或更少的数据列。


查看完整回答
反对 回复 2019-06-03
?
catspeake

TA贡献1111条经验 获得超0个赞

  1. 以一种迂回的方式,您正在打破关于在可能的情况下使用严格类型的模块化规则。直白几乎是普遍更好的。

  2. 即使您现在需要表中的每一列,以后也可以添加更多的列,这将在每次运行查询时被删除,并且可能会影响性能。这会损害性能,因为

    • 你正在从电线上提取更多的数据;
    • 因为您可能会挫败优化器将数据直接从索引中提取出来的能力(对于所有属于索引的列的查询)。而不是在表本身中进行查找。

何时使用SELECT*

当您显式地需要表中的每一列时,而不是在编写查询时需要表中的每一列时。例如,如果正在编写一个需要显示表的全部内容的DB管理应用程序(不管它们是什么),那么您可以使用这种方法。


查看完整回答
反对 回复 2019-06-03
  • 4 回答
  • 0 关注
  • 1095 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信