web-dev-qa-db-ja.com

MySQLのテキスト列にどのようにインデックスを付けますか?

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'
4
Evan Carroll

MySQLでは、キー長がタイプ修飾子として追加され、かっこcolname()に配置されます。このようにCREATE INDEXに提供できます。

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

これはindex_col_nameの一部です(テキストではオプションではないため、[]は無視してください)。

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

あるいは、MATCH機能を提供する代わりに、全文検索(FTS)インデックスが必要な場合があります。

CREATE FULLTEXT INDEX foo_bar_ftsidx ON foo ( bar );

詳細については、 全文検索に関するMySQLのドキュメント を参照してください。

8
Evan Carroll