文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  資料行索引

10.3.5 資料行索引

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

每個資料表的最大索引數和最大索引長度是根據儲存引擎定義的。請參閱第 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 索引。