部分或过滤指数

SQL Server 和 SQLite 允许创建的索引不仅包含列的子集,还包含行的子集。

考虑到 order_state_id 等于 finished(2) 的订单量不断增长,以及启动 order_state_id equal 的订单数量稳定(1)。

如果你的企业使用这样的查询:

SELECT id, comment
  FROM orders
 WHERE order_state_id =  1
   AND product_id = @some_value;

部分索引允许你限制索引,包括仅包括未完成的订单:

CREATE INDEX Started_Orders
          ON orders(product_id)
       WHERE order_state_id = 1;

此索引将小于未过滤的索引,从而节省空间并降低更新索引的成本。