文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  欄位索引

10.3.5 欄位索引

最常見的索引類型涉及單一欄位,將該欄位的值複本儲存在資料結構中,允許快速查找具有對應欄位值的列。B 樹資料結構可讓索引快速找到 WHERE 子句中與 =>BETWEENIN 等運算子對應的特定值、一組值或一系列值。

每個資料表的最大索引數和最大索引長度是根據每個儲存引擎定義的。請參閱第 17 章,InnoDB 儲存引擎第 18 章,替代儲存引擎。所有儲存引擎都至少支援每個資料表 16 個索引,且總索引長度至少為 256 個位元組。大多數儲存引擎都有更高的限制。

有關欄位索引的更多資訊,請參閱第 15.1.15 節「CREATE INDEX 語句」

索引前置詞

在字串欄位的索引規格中使用 col_name(N) 語法,您可以建立僅使用該欄位前 N 個字元的索引。以這種方式僅索引欄位值的前置詞,可以使索引檔案小得多。當您為 BLOBTEXT 欄位建立索引時,必須指定索引的前置詞長度。例如

CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));

對於使用 REDUNDANTCOMPACT 列格式的 InnoDB 資料表,前置詞最長可達 767 個位元組。對於使用 DYNAMICCOMPRESSED 列格式的 InnoDB 資料表,前置詞長度限制為 3072 個位元組。對於 MyISAM 資料表,前置詞長度限制為 1000 個位元組。

注意

前綴長度限制是以位元組為單位測量,然而在 CREATE TABLEALTER TABLECREATE INDEX 語句中,前綴長度則是以字元數來解釋非二進制字串類型 (CHARVARCHARTEXT),以及位元組數來解釋二進制字串類型 (BINARYVARBINARYBLOB)。當為使用多位元組字元集的非二進制字串欄位指定前綴長度時,請將此納入考量。

如果搜尋字詞超過索引前綴長度,則會使用索引排除不符合的資料列,並檢查剩餘的資料列是否可能符合。

關於索引前綴的更多資訊,請參閱第 15.1.15 節,"CREATE INDEX 語句"

FULLTEXT 索引

FULLTEXT 索引用於全文檢索。只有 InnoDBMyISAM 儲存引擎支援 FULLTEXT 索引,而且僅支援 CHARVARCHARTEXT 欄位。索引總是針對整個欄位建立,並且不支援欄位前綴索引。詳情請參閱第 14.9 節,「全文檢索函數」

最佳化會套用至針對單一 InnoDB 資料表執行的特定類型 FULLTEXT 查詢。具有下列特徵的查詢效率特別高:

  • FULLTEXT 查詢只傳回文件 ID,或是文件 ID 和搜尋排名。

  • FULLTEXT 查詢依分數降冪排序符合的資料列,並套用 LIMIT 子句以取得最符合的 N 個資料列。若要套用此最佳化,必須沒有 WHERE 子句,而且只有一個降冪排序的 ORDER BY 子句。

  • FULLTEXT 查詢只擷取符合搜尋字詞的資料列 COUNT(*) 值,而沒有其他 WHERE 子句。將 WHERE 子句編碼為 WHERE MATCH(text) AGAINST ('other_text'),沒有任何 > 0 比較運算子。

對於包含全文運算式的查詢,MySQL 會在查詢執行的最佳化階段評估這些運算式。最佳化工具不只會查看全文運算式並進行估計,它實際上會在制定執行計畫的過程中評估它們。

這種行為的含義是,全文查詢的 EXPLAIN 通常會比非全文查詢慢,因為非全文查詢在最佳化階段不會進行運算式評估。

全文查詢的 EXPLAIN 可能會在 Extra 欄位中顯示 Select tables optimized away,因為最佳化期間會發生比對;在這種情況下,在稍後的執行期間不需要進行資料表存取。

空間索引

您可以在空間資料類型上建立索引。MyISAMInnoDB 支援空間類型上的 R 樹索引。其他儲存引擎則使用 B 樹來索引空間類型(除了 ARCHIVE,它不支援空間類型索引)。

MEMORY 儲存引擎中的索引

MEMORY 儲存引擎預設使用 HASH 索引,但也支援 BTREE 索引。