MySQL FULLTEXT索引的单词定义及逗号、空格分隔场景疑问
MySQL MyISAM FULLTEXT索引的「单词」定义与场景差异解析
一、FULLTEXT索引对「单词」的定义
在MyISAM引擎的FULLTEXT索引中,「单词」默认被定义为由字母、数字、下划线(_)组成的连续字符序列。所有非字母数字的字符(比如逗号、感叹号等)都会被当作单词分隔符,索引构建时会自动忽略这些分隔符,只提取中间符合规则的字符序列作为索引的单词。
二、两种场景的索引差异
针对你提到的两个字符串场景,FULLTEXT索引的处理结果没有差异:
- 对于选项1的字符串
,11111,22222,33333,44444,55555,,逗号会被当作分隔符,索引最终提取的单词是11111、22222、33333、44444、55555,前后的逗号以及中间的逗号都会被过滤,不会影响索引内容。 - 对于选项2的字符串
11111 22222 33333 44444 55555,空格是默认的单词分隔符,索引提取的单词和选项1完全一致。
所以这两种场景下,FULLTEXT索引存储的单词集合完全相同,不会有差异,这也是你测试时查询时长无明显区别的原因。
三、索引识别的单词形式
索引只会识别1111这类纯字母/数字/下划线组成的形式,不会把,1111,这类包含逗号的内容当作单词。因为逗号属于分词分隔符,在构建索引时会被直接剔除,不会成为单词的一部分。
内容的提问来源于stack exchange,提问作者Sergey Nikolaevich
相关产品推荐
相关产品推荐

