Sql server 2005 Sqlserver查询优化在大表上的in子句

Sql server 2005 Sqlserver查询优化在大表上的in子句,sql-server-2005,query-optimization,Sql Server 2005,Query Optimization,我有下面的查询,它扫描了一个大表。不幸的是,我在这个列上没有索引,但我经常不得不在这个列上运行查询。是否有一种方法可以优化此查询 从匹配(nolock)中选择*,其中当前_状态为('ACT','REJ') 此表中的记录总数为30280527 如果我使用top子句而不是选择所有记录,它会提高性能吗?是的,如果使用top子句,它会根据子句排除的行数提高性能。但是,您也只能返回TOP子句指定范围内的行 不,您无法优化此查询。这是如此简单,没有什么可以处理的。你唯一的选择就是添加一个索引,如果你断言你

我有下面的查询,它扫描了一个大表。不幸的是,我在这个列上没有索引,但我经常不得不在这个列上运行查询。是否有一种方法可以优化此查询

从匹配(nolock)中选择*,其中当前_状态为('ACT','REJ')

此表中的记录总数为30280527


如果我使用top子句而不是选择所有记录,它会提高性能吗?

是的,如果使用top子句,它会根据子句排除的行数提高性能。但是,您也只能返回TOP子句指定范围内的行

不,您无法优化此查询。这是如此简单,没有什么可以处理的。你唯一的选择就是添加一个索引,如果你断言你有大量的插入,性能会受到影响,那么拒绝这样做是愚蠢的。是的,索引确实会产生开销,但与它们的性能增益相比,这种开销是微不足道的

事实上,如果在发生插入的同时运行上述查询,我怀疑扫描表所需的I/O和CPU量很可能会比维护索引和查找索引的开销带来更大的性能损失


如果您绝对要保持表无索引(因为您已经测试了一个索引添加的结果,结果是不可接受的),请考虑设置一些复制形式,其中有一个无索引表接受插入,另一个表偶尔接收来自第一个表的数据,然后将索引放在第二个表中,并在该表上运行查询。

为什么不设置一个索引,看看它是否有用?我在这个表中还有很多插入项,索引可能会导致性能问题。