我对以下内容感到困惑。我有一个大约有1000万行的数据库,并且(在其他索引中)第1列(campaignid_int)是一个索引。

现在我有70万行,其Campaignid确实为3835

对于所有这些行,connectionid都是相同的。

我只想找出这个connectionid。

 use messaging_db;
 SELECT     TOP (1) connectionid
 FROM         outgoing_messages WITH (NOLOCK)
 WHERE     (campaignid_int = 3835)

现在,此查询大约需要30秒才能执行!

我(凭着我的小数据库知识)将期望它将接受任何行,并向我返回该connectionid

如果我针对只有1个条目的广告系列测试相同的查询,则执行起来非常快。因此索引有效。

我该如何解决?为什么不起作用?

编辑:
estimated execution plan:

select (0%) - top (0%) - clustered index scan (100%)

最佳答案

根据统计信息,您应该明确要求优化器使用您创建的索引,而不是集群索引。

SELECT  TOP (1) connectionid
FROM    outgoing_messages WITH (NOLOCK, index(idx_connectionid))
WHERE  (campaignid_int = 3835)

我希望它能解决问题。

问候,
恩里克

07-26 02:00