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