gpt4 book ai didi

mysql - 提高全文搜索性能

转载 作者:行者123 更新时间:2023-11-29 01:32:10 26 4
gpt4 key购买 nike

我有一个 MySQL 数据库,其中包含一个包含 2000 万行的表。我希望能够对 varchar(255) 列之一进行自由文本搜索。所有这些值的长度总和为 6000 万个字符。目前正在做一个查询,例如:

select value from table1 where match( value ) against( 'history' ) ;

需要二十到三十秒。要在一秒或更短时间内完成此类查询需要什么?

目前这是在 VPS 上运行。我应该考虑使用什么硬件/软件来将搜索时间缩短到 1 秒或更短。

最佳答案

我完全同意 Stanislav 的观点。我认为任何外部搜索引擎,如 http://lucene.apache.org/http://sphinxsearch.com/您提到的集合大小会更快。

对于 Sphinx 速成类(class),我建议从 http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/ 中描述的简单设置开始

在您的情况下,我会在提到的基本设置中添加一些内容。

在源配置中使用范围查询来降低索引时对 MySQL 的压力,并使用开始/结束模板扩展 sql_query:

source my_source
{
...
sql_query_range = SELECT MIN(id), MAX(id) FROM table
sql_range_step = 1000
...
sql_query = SELECT id, ... FROM table WHERE id>=$start AND id <= $end
...
}

这将告诉 Sphinx 每个 MySQL 查询最多获取 1000 个文档,而不是一次获取表中的所有记录。如果您有超过 100 万条记录,则必须选择此选项。

在你的情况下,取决于你在盒子上的内存量,我也会将索引器的 mem_limit 增加到 512M..1024M,这样索引会更快。

当您使用 Sphinx 时,您可能希望将一些查询从 MySQL 移动到 Sphinx 端,并将非全文字段添加到 Sphinx 索引以执行基于地理距离或分面搜索,如 http://sphinxsearch.com/docs/current.html#attributes 中所述。

关于mysql - 提高全文搜索性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com