部分索引有助于获得更小的索引,并使INSERT更快。
例如
CREATE TABLE wine (
name VARCHAR(100),
...
INDEX (name(8)));
虽然名字类似于
Chateau Mouton-Rothschild Chateau Mouton-Cadet Chateau Petrus Chateau Lafite Chateau Lafleur ...
在这个(示例)列表中,Chateau
一直出现,MySQL根据8个第一个字符创建索引...意味着索引中只有一个条目(以及{{{ 1}}将按顺序完成所有Chateau Petrus
)。(在这种情况下,第一个单词(Chateau
)与两个字段中其余名称之间的分隔将会产生感觉,但这不是重点。)
有没有办法让MySQL根据字段的 end 创建部分索引?
答案 0 :(得分:0)
实际上我在此期间找到了一种方法 - 通过一些编程:
仅适用于name
字段
name
个条目都存储在name
次搜索都是反向 name
行颠倒 例如在PHP中
...query('INSERT ... name="' . strrev($name) . '"...
...query('SELECT * FROM wine WHERE name="' . strrev($name) . '"');
%MOUTON%
实际上会搜索%NOTUOM%
有一些reverse
开销,但与可能的数据库增益相比可以忽略不计。
问题是专门要求一个纯粹的MySQL解决方案,但如果没有,这是任何语言的可行解决方法。如果没有更好的东西,我会在几天内接受这个答案。
答案 1 :(得分:0)
除了上面提到的解决方案之外,MySQL中唯一的解决方案是显式存储您要索引的值。 (例如name
没有Chateau
)