在SELECT查询中使用*

11 浏览
0 Comments

在SELECT查询中使用*

我在某个地方读到,不要使用*来返回表中的所有列,因为这样做是懒惰的。在这种情况下,如果我需要所有5列,并且以后不会对表进行任何更改,那么在以下两种情况下是否存在性能差异:

SELECT * 
from table

SELECT id,col1,col2,col3,col4 
from table

0
0 Comments

在SELECT查询中使用*的原因是为了简化代码,可以一次性选择表中的所有列。然而,这种做法存在一些问题。

问题的出现原因是,如果在后续操作中修改了表的结构,比如添加了新的列,那么使用*的查询可能会导致一些复杂的查询(比如跨多个表的查询)出现问题。

在某些平台上,使用*和指定具体列是有区别的。比如在SQL Server中,如果使用*,当表的结构发生变化时,查询结果可能会出现错位或缺失的情况。

举个例子,有一个SQL Server的视图,查询语句类似于SELECT A.*, B.X, C.Y, D.Z,当表A的末尾添加了一个新列后,视图返回的结果中,原本应该是B.X的列变成了A表的最后一列,B.X被移动到C.Y的位置,而D.Z则没有被返回。为了解决这个问题,可以将查询语句中的具体列明确指定出来,这样就不会出现列错位的问题了。

虽然有人认为使用*和指定具体列在元数据查找次数上是一样的,但实际上这两种写法是有区别的。使用*会在查询时对元数据进行查找,而指定具体列只需要查找一次,因此在性能上可能会有一些差异。

为了避免出现因表结构变动引起的查询问题,最好还是在SELECT语句中明确指定具体的列,而不是使用*。

0
0 Comments

在SELECT查询中使用*出现的原因是为了简化查询语句,省去写出所有列名的麻烦。然而,这样做可能会导致以下问题:

1. 可读性差:使用*无法清晰地表达查询的意图,不容易理解查询的结果包含哪些列。

2. 可能出现列变动:无法确定是否会有列被添加、删除或修改,这样会导致查询结果的不稳定性。

3. 更新查询困难:如果以后需要对查询进行更新,比如给列添加别名,使用*将变得困难。

4. JOIN操作复杂:如果在查询中需要添加JOIN操作,使用*可能会导致查询结果中出现意外的列,增加了开发和调试的难度。

为了解决这些问题,我们应该使用显式列名的方式进行查询,即明确指定所需的列名。这样可以提供更好的可读性和可维护性,并且避免以上问题的发生。

0