MySQL 的 like %关键字怎么优化?

2014-09-17 15:29:39 +08:00
 shyrock
为了降低成本,打算把现有系统从Oracle迁移到MySQL。
但是偶然听到用过的人抱怨MySQL对于like %关键字 这种查询条件没法使用索引,都是全表扫描。
很担心移植后的性能。

各位知道怎么优化吗?
34105 次点击
所在节点    MySQL
35 条回复
88250
2014-09-17 23:06:10 +08:00
@Livid 可惜 es 的脑裂问题至今未解决
cloudzhou
2014-09-17 23:18:41 +08:00
如果对 lucene 比较熟悉,可以直接使用 lucene 来做
GTim
2014-09-17 23:25:04 +08:00
谁说like %关键字 没法用索引的,是like %关键字% 没法用索引
pubby
2014-09-17 23:27:45 +08:00
@zyx89513 中文么?sphinx中文版 coreseek新版一直难产

老版本不支持线程,索引大的话建议切分用到多个coreseek进程来服务
zyx89513
2014-09-17 23:52:55 +08:00
@pubby 是啊中文, 那个coreseek我看了好像很久没更新了一样。 所以你觉得还是elasticsearch好一些是么? 我看有个插件elasticsearch-river-jdbc可以配合 MySQL 一起使用
GTim
2014-09-18 00:01:10 +08:00
@GTim 我错了. 不能用到索引
pubby
2014-09-18 00:44:36 +08:00
@zyx89513 没用过lucence系的,不好比较。
我是用xml数据源,没有mysql配合,勉强够用
shyrock
2014-09-18 10:00:09 +08:00
@em70 可惜还是不能满足我说的部分词匹配的要求啊。。。总不能把Word拆分成W/ord来建索引吧
6711411
2014-09-18 10:55:05 +08:00
有人使用过 sphinx 做地理位置搜索吗? 有的话请回复我一下, 有问题请教...
halfelf
2014-09-18 11:11:33 +08:00
es做regex filter显然可以解决这个问题
em70
2014-09-18 12:24:37 +08:00
@shyrock 这需要一些优化技巧,首先单词就那几千个,可以先在单词表like搜索,找到最可能匹配的单词,然后用这个单词再去反向索引库搜索
shyrock
2014-09-18 16:51:13 +08:00
@halfelf 愿闻其详
RangerWolf
2014-09-19 09:27:58 +08:00
AWS DynamoDB 便宜好用~ 而且非常非常的diao
100W的数据,查询延迟还是能做到毫秒的级别,而且不需要你去关心底层如何优化。如果全套托管在AWS的话,WebApp放Elastic Beanstalk。 每个月不会超过10$的费用。甚至连10¥都不一定需要。注意:导入数据到DynamoDB是免费的! 流量不花钱。

AWS的问题就是服务太多了,不熟悉的情况下不知道哪个合适自己。。。。

刚用上AWS,发现太赞了,所以强烈推荐。
RangerWolf
2014-09-19 09:29:31 +08:00
@shyrock 关于你要查询W/ord 这种需求。感觉就需要你针对业务去仔细设计一下DB的结构了。 Good luck 哈哈
RyanArthur
2020-02-26 18:02:26 +08:00
如果有同学查到这里,我要为大家填一个坑,FTS ( FullText Search) 的使用与 InnoDB 和 MyIASM 有关系。如果使用 InnoDB,那么如果查询的关键字小于 innodb_ft_min_token_size 的约定或者大于 innodb_ft_max_token_size 的约定值,那么 FTS 会直接忽略查询结果。如果使用 MyIASM,是 ft_min_token_size 和 ft_max_token_size。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/133996

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX