【发布时间】:2012-11-01 03:24:43
【问题描述】:
我使用 MySQL + Sphinx 来存储数百万行数据。我们有网站可以查看我们数据库中的所有信息。
例如,电影标题(100,000,000 行)。我需要在我们的网站上查看所有这些内容,每页 100 个标题。另外,我需要按演员受欢迎程度排序。
对于前 10 页,一切都很好。但在那之后我达到了max_matches 的限制。增加此限制将强制 sphinx 使用更多 CPU/RAM。
另外,我什至无法将 max_matches 设置为 20,000,000。
警告:max_matches=20000000 超出范围;使用默认 1000
我可以使用 MySQL 执行如下查询:
SELECT * FROM titles WHERE tid >= $start AND tid <= $end
使用 tid 索引。但我无法按 tid 对其进行排序。我需要按其他表格中的信息对我的标题进行排序。
访问数百万行、排序并快速完成的最佳方式是什么?请帮忙。
更新:来自 sphinx 来源:/src/searchd.cpp
if ( iMax<0 || iMax>10000000 )
{
sphWarning ( "max_matches=%d out of bounds; using default 1000", iMax );
} else
{
g_iMaxMatches = iMax;
}
10000000 是限制吗?我怎样才能得到更多的补偿?
【问题讨论】:
-
这个不推荐,直接分页不行吗?
-
你是什么意思?问题是,我无法对其进行分页...
-
你能做的就是将数百万行分成更小的结果集,每次,你只需获取 1000 条记录,我的意思是,一个循环
-
你真的需要1000万的offset吗?即使你每页放 1000 页,那也是 10K 页——我怀疑有人会走得那么远。请注意, max_matches 是针对返回的结果,这并不意味着它将仅搜索 1000 万个。例如,谷歌不允许你超过 1000 偏移量:)
-
是的,我需要数千页。我确实需要。我的任务。
标签: mysql performance sphinx