我有一个简单的SELECT语句:优化简单的SQL SELECT
SELECT id1, id2, id3 FROM Table1
表1包含约40万条记录。
当前,该语句需要5秒钟才能执行。
是否有可能对此进行优化(不减少返回记录的数量)?
我有一个简单的SELECT语句:优化简单的SQL SELECT
SELECT id1, id2, id3 FROM Table1
表1包含约40万条记录。
当前,该语句需要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 ...不知道其他SGBDs,但可以肯定也有同类者......但因为你的问题是关于SQL Server中,它的好,我猜! :)
如果您经常查询没有过滤的400k行,以至于您关心优化它,那么您的应用程序中有一个设计问题应该解决。 –
@SeanBright同意了。这种说法实际上并不适用于生产。 – Rivka