我有一个简单的选择语句:
SELECT id1, id2, id3 FROM Table1
表 1 包含大约 400,000 条记录。
目前,此语句需要 5 秒才能执行。
是否可以对此进行优化(不减少返回的记录数)?
我有一个简单的选择语句:
SELECT id1, id2, id3 FROM Table1
表 1 包含大约 400,000 条记录。
目前,此语句需要 5 秒才能执行。
是否可以对此进行优化(不减少返回的记录数)?
添加一个包含所有三个字段的索引,这将导致 SQL 从索引页面读取。这也称为覆盖索引。不过要记住的一件事是,添加索引会减慢写入时间,因为必须在写入期间重建索引。
CREATE INDEX IDX_CoveredIndex ON Table1 (id1, id2, id3)
但是,只有 400K 行,我想说这可能不是问题。
不,您的查询会导致简单的表扫描。只要你没有where
或没有order
声明,它是你能做的最好的。
问题是,为什么要选择所有没有过滤器的行?如果您在应用程序中进行过滤,那么您做错了。
这不是适当的优化,但你应该尝试(nolock)
在表名之后使用,这样你就不会在这 5 秒内锁定表,让其他人也可以使用它......
仅当您尝试同时从多个位置访问表时,这才是优化,因此您无需等待一个结束使用该表来启动另一个,一次完成所有操作。
SELECT id1, id2, id3 FROM Table1 (nolock)
PS:这是SQL Server sintax ...不知道其他SGBD,但很确定有相似之处...但是由于您的问题是关于SQL Server,所以我想没关系!:)