在没有扫描整个表的情况下,MySQL中是否有任何内置功能可以执行上述操作?
我找到的唯一解决方案是存储我想要比较的列的镜像版本并执行like 'txet%'.
我也没有看到绕过postfix-search的方法.这是一本德语词典.许多单词都有带前缀的版本,例如用户搜索"Gericht"(Engl.curt),但知道有一个单词"Amtsgericht"(英语区域缩写)也很有价值.不幸的是,在德语中通常没有空格分隔单词的两个部分.大约15%的查询实际上使用前缀搜索.
反向字段的索引将是解决方案,有些人认为:
create index idx_reverse on table ( reverse( field ) );
select * from table where reverse(field) like 'txet%';
Run Code Online (Sandbox Code Playgroud)
但MySQL不会对表达式进行索引,只对列进行索引:
这是MySQL创建索引语法:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[index_type]
ON tbl_name (index_col_name,...)
[index_option] ...
Run Code Online (Sandbox Code Playgroud)
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] name ON table [ USING method ]
( { column | ( expression ) } [ opclass ] [, ...] )
...
Run Code Online (Sandbox Code Playgroud)
一个解决办法可能是创建索引的第二场(场- > dleif)和MySQL的触发器,以保持反场:
alter table my_table add column dleif ...;
create index idx_reverse on my_table ( dleif );
Create Trigger `reverse_field` Before Update on `my_table` for each row BEGIN
set new.dleif = reverse( new.field );
END;
select * from table where dleif like reverse('%text');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |