Mysql

你如何索引 MySQL 中的文本列?

  • June 22, 2018

如果我創建一個包含一text列的表

CREATE TABLE foo ( bar text );

我無法索引該bar列。

MariaDB [test]> CREATE INDEX foo_bar_idx ON foo ( bar );
ERROR 1170 (42000): BLOB/TEXT column 'bar' used in key specification without a key length

如果我HELP CREATE INDEX,我得到,

Syntax:
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
   [index_type]
   ON tbl_name (index_col_name,...)
   [index_option] ...

index_col_name:
   col_name [(length)] [ASC | DESC]

index_type:
   USING {BTREE | HASH}

index_option:
   KEY_BLOCK_SIZE [=] value
 | index_type
 | WITH PARSER parser_name
 | COMMENT 'string';

KEY_LENGTH不僅沒有提到KEY_BLOCK_SIZE,但是如果我將其用作選項,我會得到

MariaDB [test]> CREATE INDEX foo_bar_idx ON foo ( bar ) KEY_LENGTH = 5;
ERROR 1911 (HY000): Unknown option 'KEY_LENGTH'

在 MySQL Key Length 作為類型修飾符添加並放在括號中colname(),您可以CREATE INDEX像這樣提供它,

CREATE INDEX foo_bar_idx ON foo ( bar(500) );

它是 , 的一部分index_col_name(除了它在文本上不是可選的,所以忽略[]

index_col_name:
 col_name [(length)] [ASC | DESC]

或者,您可能需要全文搜尋 (FTS) 索引,而不是提供MATCH功能

CREATE FULLTEXT INDEX foo_bar_ftsidx ON foo ( bar );

有關更多資訊,請參閱全文搜尋上的 MySQL 文件

引用自:https://dba.stackexchange.com/questions/210403