为什么在SQLServer中索引列的顶部(1)执行得比较慢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我对以下情况感到困惑。我有一个数据库,大约有一千万行。

现在我有700,000排的竞选活动确实是3835。

对于所有这些行,连接id是相同的。

我只想找出这个连接体。

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

现在,这个查询需要大约30秒的时间来执行!我期望它将接受任何行,并返回连接id。

如果我对只有一个条目的活动进行同样的查询,它就会运行得非常快。所以索引起作用了。

我如何处理这个问题,为什么这个问题行不通?

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)
用户回答回答于

我最近也遇到了同样的问题,而且解决起来真的很简单(至少在某些情况下是这样)。

如果添加ORDER BY-任何列或部分列上的子句,都应该解决它的索引问题。至少对我来说是这样。

扫码关注云+社区