where 子句中的部分索引

SQL Server 中的 filtered index 允许我们针对部分行建索引。

1
2
3
4
SELECT message
FROM messages
WHERE processed = 'N'
AND receiver = ?

以上是一个在队列系统中常用的 query,已经处理的消息很少需要用到。

1
2
3
CREATE INDEX messages_todo
ON messages (receiver)
WHERE processed = 'N'

可以通过以上方式建立部分索引。索引只包含满足 where 条件的行,因为 PROCESSED 字段总是’N’,只需要为 RECEIVER 字段建索引就足够了,大大节省了开销。

SQL Server 对部分索引的限制比较严格,不允许使用 function 跟 OR 运算符。

作者

Jesse

发布于

2021-06-03

更新于

2021-07-19

许可协议

评论