-1

我有一个简单的选择语句:

SELECT id1, id2, id3 FROM Table1

表 1 包含大约 400,000 条记录。

目前,此语句需要 5 秒才能执行。

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

4

3 回答 3

3

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

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

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

于 2012-09-20T17:03:58.610 回答
1

不,您的查询会导致简单的表扫描。只要你没有where或没有order声明,它是你能做的最好的。

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

于 2012-09-20T17:04:54.777 回答
-1

这不是适当的优化,但你应该尝试(nolock)在表名之后使用,这样你就不会在这 5 秒内锁定表,让其他人也可以使用它......

仅当您尝试同时从多个位置访问表时,这才是优化,因此您无需等待一个结束使用该表来启动另一个,一次完成所有操作。

SELECT id1, id2, id3 FROM Table1 (nolock)

PS:这是SQL Server sintax ...不知道其他SGBD,但很确定有相似之处...但是由于您的问题是关于SQL Server,所以我想没关系!:)

于 2012-09-20T17:08:27.833 回答