Eva*_*oll 8 mysql mariadb index datatypes
如果我创建一个带有text
列的表
CREATE TABLE foo ( bar text );
Run Code Online (Sandbox Code Playgroud)
我无法索引该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
Run Code Online (Sandbox Code Playgroud)
如果我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';
Run Code Online (Sandbox Code Playgroud)
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'
Run Code Online (Sandbox Code Playgroud)
Eva*_*oll 12
在 MySQL Key Length 中作为类型修饰符添加并放置在括号中colname()
,您可以CREATE INDEX
像这样提供它,
CREATE INDEX foo_bar_idx ON foo ( bar(500) );
Run Code Online (Sandbox Code Playgroud)
它是 , 的一部分index_col_name
(除了它在文本上不是可选的,所以忽略[]
)
index_col_name:
col_name [(length)] [ASC | DESC]
Run Code Online (Sandbox Code Playgroud)
或者,您可能需要全文搜索 (FTS) 索引而不是提供MATCH
功能
CREATE FULLTEXT INDEX foo_bar_ftsidx ON foo ( bar );
Run Code Online (Sandbox Code Playgroud)