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)
提前致谢!
删除 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)
您可以在以下列(message_type_id、hidden、message_id)上创建覆盖索引。尝试索引中不同的列顺序:这可能会有所不同。
我宁愿不使用过滤索引:优化器很可能无法使用它。
归档时间: |
|
查看次数: |
5629 次 |
最近记录: |