加速 COUNT(*) - WHERE 子句减慢查询速度

Dar*_*ong 7 sql-server-2008 sql-server t-sql count

以下查询需要 497 ms 才能运行,如果我删除 AND 部分之后只需要 320 ms。有没有办法加快这个速度?我在“messages”表上的唯一索引是“messages_id”上的PK。'hidden' 字段是一个位字段(非空),'message_type_id' 是一个 int 字段(非空),而 message_id 是一个 int 字段(PK)。

SELECT COUNT(*)
FROM messages
WHERE message_type_id = 1
AND (hidden = 0 OR message_id = @message_id)
Run Code Online (Sandbox Code Playgroud)

提前致谢!

gbn*_*gbn 6

删除 OR 的另一种方法。
你可以试试这个,在表上有 2 个索引来满足 WHERE 子句。

SELECT
    COUNT(*)
FROM
    (
    SELECT message_id
    FROM messages
    WHERE message_type_id = 1 AND hidden = 0
    UNION
    SELECT message_id
    FROM messages
    WHERE message_type_id = 1 AND message_id = @message_id
    ) X
Run Code Online (Sandbox Code Playgroud)

  • @JonSeigel:哦,该死的。会纠正 (2认同)

A-K*_*A-K 4

您可以在以下列(message_type_id、hidden、message_id)上创建覆盖索引。尝试索引中不同的列顺序:这可能会有所不同。

我宁愿不使用过滤索引:优化器很可能无法使用它。