数据库是mysql5.7,数据量就认为一千万吧,想在这一千万的数据量中实现高效的模糊查询,有什么好的办法么?
走不了索引,单字段搜索,要精确搜索, 类似于 select * from table where title like %关键词% limit 100 这种。
这里面加了个限制,只返回前100条数据。不然更慢了。
感觉无解了,因为模糊搜索,走不了索引,所以每次全量查询就很慢。大概在10s左右。
==================
试过了很多种方法,效果都不太理想。
1、换es这个方案就大可不必了,划不着,没有精力再去维护一个es,还得数据同步,最重要是占内存。
2、mysql的分词索引这个方案也试过了,非常难用,而且对中文支持极其不友好,而且搜索不精准。
3、自己手动维护一个索引表这个方案也考虑过,感觉也不太可行,增加代码复杂度,而且分词导致搜索不准确。
4、分库分表这个方案也不用推荐了哈。
不要借助第三方的中间件哈,比如es,大数据数据库等。
目前只有一个 mysql + java程序。目前想到的有一个可行的方案是这样的,将数据全部加载到内存中,
在内存中实现模糊搜索,效果确实是很快,测试了3百万的数据量,都是在500ms内完成的。
但是问题点在于,太太太占内存了,差不多一百万的数据量占100M的内存空间。但是分给整个java的
堆内存才512M。也就是说,除了java程序自己本身消耗的内存, 也就最多 缓存300W条的数据量差不多,
加不了内存哈,就这么大的内存了,所以说,在不加内存的情况下 如何实现快速模糊搜索呢?
希望大佬指点一下,在这先谢谢了。
内存这个是真的加不了,毕竟现在服务器死贵。能给到java程序的最多也就512M的内存了,所以有没有
可以从jvm优化这块下手的,或者其他方案来实现的呢?
对了,不知道everything是如何实现搜索的,这个搜索起来真的是飞快,有大佬知道么?
数据库新手,一个很简单的想法,为嘛不能做个类似下表的索引呢?
索引表
搜索“模糊搜索”