[英]Partial MySQL index from End of Field
部分索引有助于使索引更小,并使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个字符创建索引...意味着索引中将只有一个条目( Chateau Petrus
的搜索将按顺序对所有Chateau
)。
(在这种情况下,将第一个单词( Chateau
)和名称的其余部分在两个字段中分开是有意义的,但这不是重点。
有没有办法让MySQL根据字段的结尾创建部分索引?
实际上,我与此同时找到了一种方法-进行了一些编程:
仅用于name
字段
name
条目都反向存储在数据库中 name
搜索都被反向 name
被颠倒了 例如在PHP中
...query('INSERT ... name="' . strrev($name) . '"...
...query('SELECT * FROM wine WHERE name="' . strrev($name) . '"');
%MOUTON%
实际上将搜索%NOTUOM%
有一些reverse
开销,但是与可能的数据库增益相比可以忽略不计。
问题是专门要求使用纯MySQL解决方案,但是如果没有解决方案,那么这是任何语言的可行解决方案。 如果没有更好的办法,我将在几天后接受这个答案。
除了上面提到的解决方案之外,MySQL中唯一的解决方案是显式存储要索引的值。 (例如,没有Chateau
name
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.