GIN 代表 Generalized Inverted Index。GIN 設計用於處理要被索引的項目是複合值的情況,並且由索引處理的查詢需要搜索出現在複合項目內的元素值。例如,這些項目可能是文件,查詢可能是搜索包含特定單詞的文件。
我們使用單詞 item 來引用要編入索引的複合值,並使用單詞索引鍵(word key)來引用元素值。GIN 總是儲存和搜索索引鍵,而不是其值。
GIN 索引儲存一組(key, posting list)對,其中 posting list 是 key 對應的一組資料列 ID。同一資料列 ID 可以出現在多個 posting list 當中,因為一個項目可以包含多個關鍵字。每個索引鍵值只儲存一次,因此對於相同鍵出現多次的情況,GIN 索引非常會緊湊。
GIN 是泛用的,因為 GIN 存取方法的語法不需要知道它加速的具體操作。相反地,它使用為特定資料型別定義的自訂策略。該策略定義瞭瞭如何從索引項目和查詢條件中提取關鍵字,以及如何確定包含查詢中某些關鍵值的資料列能夠實際滿足查詢。
GIN 的一個優點是,它允許由資料型別領域的專家而不是資料庫專家使用適當的存取方法開發自訂的資料型別。這與使用 GiST 的優點相同。
PostgreSQL 中的 GIN 實現偏主要由 Teodor Sigaev 和 Oleg Bartunov 維護。在他們的網站上有更多關於 GIN 的訊息。