2012-09-20 69 views
-1

我有一个简单的SELECT语句:优化简单的SQL SELECT

SELECT id1, id2, id3 FROM Table1 

表1包含约40万条记录。

当前,该语句需要5秒钟才能执行。

是否有可能对此进行优化(不减少返回记录的数量)?

+3

如果您经常查询没有过滤的400k行,以至于您关心优化它,那么您的应用程序中有一个设计问题应该解决。 –

+0

@SeanBright同意了。这种说法实际上并不适用于生产。 – Rivka

回答

3

添加一个索引,其中包含所有三个字段,这将导致SQL从索引页读取。这也被称为覆盖索引。但要记住的一件事是,添加索引可以减慢写入时间,因为索引必须在写入期间重建。

CREATE INDEX IDX_CoveredIndex ON Table1 (id1, id2, id3) 

但是,只有400K行,我认为这可能不是问题。

+2

+1当然,假设表中的字段数多于三个选定的字段,否则索引不会有太大的区别。 – Guffa

+0

这似乎并不影响速度。我用你的上面的语法来创建索引。 @Guffa这些是表中唯一的字段。编辑看起来像是喜怒无常 - 现在它正在播放3和4:P – Rivka

+0

@Rivka:这是“服务器”你的笔记本电脑或开发盒? –

1

不,您的查询结果为简单的表扫描。只要你没有whereorder声明,这是你可以做的最好的。

问题是,为什么你选择没有过滤器的所有行?如果你在你的应用程序内部过滤,那么你做错了。

-1

这不是正确的优化,但你应该尝试在表名后使用(nolock),所以那些5秒内,你会不会锁表,允许其他人也用它...

这是优化只有当你试图同时从多个地方访问表时,所以你不需要等待一端使用表来启动另一个表,一次完成所有工作。

SELECT id1, id2, id3 FROM Table1 (nolock) 

PS:这是SQL Server的sintax ...不知道其他SGBDs,但可以肯定也有同类者......但因为你的问题是关于SQL Server中,它的好,我猜! :)