在整个字符串上建立索引。
完整索引使用整个字符串字段建立索引。当字段的长度过长时,会占用较多的存储空间。
使用字符串的前n个字符创建索引。
建议索引的关注点是区分度,即某列中不同的值的个数/数据总条数。区分度越高的时候,重复的值越少。
我们可以使用试验的方法,确定不同n值的区分度,然后选取区分度最大的n值。
例如我们要在email字段上建立索引:
select
count(distinct left(email, 4)) as L4,
count(distinct left(email, 5)) as L5,
count(distinct left(email, 6)) as L6,
count(distinct left(email, 7)) as L7,
from SUser;
假设我们设定的区分度目标是 95%,若L6,L7都达标,则选择L6,即前缀索引的长度为6。
将字符串倒置,再创建前缀索引。
字符串后几位的区分度更高,例如身份证的后六位。
倒叙索引无法使用范围查询。
在表上再创建一个字段,用于保存某个字段的校验码。例如在身份证号上使用crc32() 校验码。
哈希索引无法使用范围查询。
最常见的字符串索引是完整索引,后续的改进都是为了减少字符串索引的存储空间,但同时引入了不同的问题。
在实际的应用中,需要根据不同的场景选择合适的策略。