Navicat 部落格

反向索引簡介 2021 年 6 月 25 日,由 Robert Gravelle 撰寫

像大多數資料庫開發人員一樣,你可能已經編寫了相當多的査詢,這些查詢在文字或二進位資料中搜尋就彷如海底撈針。我知道我有!可能比針對資料庫編寫的 SELECT 陳述式更重要的是它包含的索引。為此,反向索引可以大大有助於快速存取一大堆資料。在今天的文章中,我們將以 MySQL 為例,學習什麼是反向索引,以及如何在資料庫中使用它們。

正向索引與反向索引

反向索引實際上是幾十年前發明的,大約是在第一批人工智慧和機器學習演算法誕生的同一時間。然而,直到最近計算能力的提高,才使得在傳統關聯式資料庫中使用反向索引成為可能。反向索引允許更快地找到關聯式資料庫中的資訊,同時也允許査詢變得更加複雜和具體。

與將資料表列對應到關鍵字清單的一般(正向)索引不同,反向索引將關鍵字一般到它們各自的列。下面是一個並排比較:

正向索引反向索引
關鍵字單詞
列1
列2
列3
hello, sky, morning
tea, coffee, hi
greetings, sky
hello
sky
coffee
hi
greetings
列1
列1, 列3
列2
列2
列3

使用正向索引搜尋的過程比較慢,因為資料庫引擎必須查看索引的全部內容才能擷取與某個單詞相關的所有頁面。同時,透過反向索引擷取就非常快,因為索引中沒有重複的關鍵字,每個單詞都直接指向相關列。

MySQL 中的反向索引

MySQL 的 InnoDB 引擎在文字型的欄(CHAR、VARCHAR 或 TEXT 欄)上實作全文檢索索引,以加快對這些欄中包含的資料的査詢和 DML 作業。全文檢索索引採用反向索引設計,以便索引中的每個關鍵字都指向該單詞出現的文件清單。它還支援鄰近搜尋,透過儲存每個單詞的位置資訊,還可以定位在一定數量的單詞中出現的兩個或多個單詞。

在 Navicat 資料庫管理開發工具(如 Navicat for MySQLNavicat Premium)中,你可以在一般資訊窗格中檢視資料表的引擎:

table_properties (11K)

假設你的資料表使用 InnoDB 引擎,你可以在資料表設計器的「索引」索引標籤上的「索引類型」下拉式清單來指定 FULLTEXT 索引。下面是加入 FULLTEXT 索引的最佳欄的範例 - Sakila 範例資料庫的 Film 資料表中的 Description 欄:

index_type (43K)

像這樣的文字欄位很適合使用反向索引,因為要搜尋的單詞和片語太多了:

film_description_column (118K)

總結

反向索引是一種加快査詢的速度的好方法,同時允許査詢變得更加複雜和具體。請注意,索引程序比正向索引花費的時間更長。

如果你對 Navicat for MySQLNavicat Premium 感興趣,可以免費試用 14 天!



Rob Gravelle 居住於加拿大渥太華,是一名有 20 多年經驗的 IT 專家。過住,Rob 曾為情報相關的組織(如加拿大邊境服務局和各種商業組織)建置系統。在業餘時間,Rob 是一名出色的吉他演奏家,並擁有多張 CD和數位發行

Navicat 文章
頻道記錄
分享
部落格封存檔