部分或過濾指數

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;

此索引將小於未過濾的索引,從而節省空間並降低更新索引的成本。