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

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

我见过许多人声称您应该在SELECT查询中具体地命名您想要的每一列。

假设我无论如何都要使用所有的列,我为什么不使用SELECT *?

即使考虑到这个问题*SQLQuery-从视图中选择*或选择col1、col2、…柯伦*,我不认为这是一个确切的重复,因为我是从一个稍微不同的角度来处理这个问题。

我们的原则之一是在时机成熟之前不进行优化。考虑到这一点,它看起来就像使用SELECT *应该是首选方法,直到它被证明是一个资源问题,或者模式基本上是一成不变的。正如我们所知,在开发完全完成之前,这是不可能发生的。

也就是说,是否有一个压倒一切的问题不能使用?SELECT *?


九州编程
浏览 1152回答 4
4回答

肥皂起泡泡

“不过早地优化”的引语的实质是使用简单而直接的代码和然后使用分析器指出热点,然后您可以优化这些热点以提高效率。当您使用SELECT*时,您将无法进行概要分析,因此您并不是在编写清晰而直接的代码,而且您违背了引用的精神。select *是一种反模式。因此,选择列并不是一个过早的优化。我头上有几件事.如果在SQL语句中指定列,则如果从表中删除该列并执行查询,则SQL执行引擎将出错。您可以更容易地扫描使用该列的代码。您应该始终编写查询,以获取最少的信息。正如其他人提到的,如果您使用序号列访问,则永远不要使用SELECT*如果SQL语句连接表,则选择*为联接中所有表的所有列提供其推论是使用select * ...应用程序使用的列是不透明的。DBA及其查询分析器无法帮助您的应用程序性能低下当发生更改时,代码更加脆弱。您的数据库和网络正在遭受损失,因为它们带来了太多的数据(I/O)。数据库引擎优化是最小的,因为您将带回来所有数据,而不管(逻辑)。编写正确的sql与编写正确的sql一样容易。Select *..因此,真正懒惰的人编写适当的SQL,因为他们不想重新查看代码,并试图记住他们在执行代码时所做的事情。他们不想向DBA解释每一段代码。他们不想向客户解释为什么应用程序像狗一样运行。

白猪掌柜的

如果您的代码依赖于以特定顺序排列的列,则当表发生更改时,您的代码将中断。此外,当选择*时,可能会从表中获取太多信息,特别是在表中有二进制字段的情况下。仅仅因为您现在正在使用所有的列,这并不意味着其他人不会向表中添加额外的列。它还增加了计划执行缓存的开销,因为它必须获取有关表的元数据,以了解哪些列在*中

拉风的咖菲猫

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

catspeake

以一种迂回的方式,您正在打破关于在可能的情况下使用严格类型的模块化规则。直白几乎是普遍更好的。即使您现在需要表中的每一列,以后也可以添加更多的列,这将在每次运行查询时被删除,并且可能会影响性能。这会损害性能,因为你正在从电线上提取更多的数据;因为您可能会挫败优化器将数据直接从索引中提取出来的能力(对于所有属于索引的列的查询)。而不是在表本身中进行查找。何时使用SELECT*当您显式地需要表中的每一列时,而不是在编写查询时需要表中的每一列时。例如,如果正在编写一个需要显示表的全部内容的DB管理应用程序(不管它们是什么),那么您可以使用这种方法。
打开App,查看更多内容
随时随地看视频慕课网APP