8.5. 函數索引

對於函數索引(functional index), 它是定義在一個函數的結果上的,這個函數對某一個表的一個或多 個欄位進行操作。 函數索引可 以用於獲得對那些基於函數調用結果資料的快速存取.

比如,做大小寫無關比較的常用方法是使用函數 lower

SELECT * FROM test1 WHERE lower(col1) = 'value';

如果我們在 lower(column) 操作的結果上定義索引, 那麼這個查詢就可以使用索引︰

CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));

在索引定義裡的函數可以接受更多個參數,但是這些參數 都必須是表的欄位,而不能是常數.函數索引總是單欄位 索引(也就是函數的結果),即使函數有多個輸入域也如此﹔ 不可能有包含函數調用的多欄位索引.

小知識: 上面那段提到的約束可以很容易通過在索引定義中使用 客戶化定義的函數,由該函數在內部計算任何我們需要的結果來繞開.