0

我有一个表 1 lac 行,有 50 列。我知道我必须根据主键准确选择一行和一列。那么我必须使用什么查询

SELECT * FROM <TAB_NAME> WHERE <IND_COL_NAME> = XXXXXX  

或者

SELECT COL_NAME FROM <TAB_NAME> WHERE <IND_COL_NAME> = XXXXXX  

所以任何人请告诉我哪种方法更好以及为什么。从性能上看。假设此查询在可扩展的应用程序中频繁运行。请说明原因。

4

3 回答 3

0

理想的方法是

 SELECT yourcolumn FROM yourtable WHERE yourcondition

它将产生更少的网络流量,并且更准确地说明您的要求。

此外,如果您的表具有某些类型的列,则可以避免对它们进行昂贵的查询,从而提高性能

于 2012-08-07T10:51:26.790 回答
0

这完全取决于您的索引,但是,在我能想到的大多数情况下,窄选择 ( SELECT COL_NAME) 会执行得更好,因为它为 SQL 提供了更多关于如何获取数据的“选项”。

一般来说,对于任何给定的查询,最好的情况是有一个索引,它允许根据您的WHERE条件进行索引搜索,但也包括您在SELECT. 这样,RDBMS 只需要使用索引来获取查询结果——它根本不需要基础表。

在 MS SQL Server 中,覆盖索引将允许您执行此操作。

不太可能

SELECT * FROM <TAB_NAME> WHERE <IND_COL_NAME> = XXXXXX  

在许多情况下将是最佳的,因为除非您有一个IND_COL_NAME包含表中所有列的索引(这将浪费存储,除非<IND_COL_NAME>您的聚集索引)。否则,这意味着查询将需要查找索引,<IND_COL_NAME>然后重新连接到物理表中以检索其余列数据。

所以对于你的狭隘查询

SELECT COL_NAME FROM <TAB_NAME> WHERE <IND_COL_NAME> = XXXXXX

最佳索引将打开<IND_COL_NAME>,其中包括COL_NAME。由于您说这<IND_COL_NAME>是您的主键,因此它将具有很高的选择性。

于 2012-08-07T10:54:17.953 回答
0

不要*用于指定字段,始终准确指定您想要的字段。

获取单行时,数据大小差异很小,但您通常应该只获取减少带宽使用所需的数据。另一方面是使用*增加了对表格设计的依赖。如果您稍后向表中添加更多字段,则查询也会获取这些字段,这可能意味着您获得的数据多于缓冲区的容量,并且您会遇到异常。

当您从表中获取单个字段(或几个字段)时,会有特定的性能优势。如果您有一个包含所需字段的键的索引作为包含的列,则可以仅从索引运行查询,甚至不触及表本身。

于 2012-08-07T10:57:19.543 回答