情况如下:
我的数据库中有一个大表--3.6 GB和1,7M行。从表中选择限制和偏移非常慢并且经常导致错误504.表是MyISAM,具有多个索引并且将被更新。
这就是为什么我决定使用Sphinx列出表的内容 - 在某些情况下没有查询(所有行),在某些情况下使用查询 - 它就像一个魅力。速度惊人。
但这是问题 - 没有查询只返回前1000个结果。即使我使用$this->SetLimits(41, 24);
来调用它,也应该返回ID为984
到1008
的结果,但我得到的最后一个结果是ID为1,000。我尝试更改/etc/sphinxsearch/sphinx.conf
中的值,重新启动服务,但没有成功。
还有,这是一个好主意吗?我的意思是,它会明显减慢性能吗?有关如何做到这一点的任何建议吗?
这是另一个问题:
在我的sphinx.conf
我选择了我想用于搜索/订单的列,它们都出现在[matches]
部分。由于我不使用它们,它们只占用内存并且(我猜)在某种程度上降低了性能。我只在我的应用程序中使用id
。是否可以按这些列进行搜索/排序,但将其从[matches]
中排除?
我的sphinx.conf
source test {
type = mysql
sql_host = localhost
sql_user = root
sql_pass = password
sql_db = database
sql_port = 3306
sql_query = \
SELECT id, name, UNIX_TIMESTAMP(date) as date, views, rating \
FROM table \
WHERE active = 1
sql_field_string = name
sql_attr_timestamp = date
sql_attr_uint = views
sql_attr_uint = rating
sql_query_info = SELECT * FROM table WHERE id=$id
}
index test {
source = test
path = /var/lib/sphinxsearch/data/test
docinfo = extern
charset_type = utf-8
}
searchd {
listen = 9312
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinxsearch/searchd.pid
max_matches = 10000 # I tried changing this to 10,000 - no result
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /var/lib/sphinxsearch/data
}
答案 0 :(得分:2)
这是因为每次查询最大匹配设置也是如此,默认为1000.
在sphinx.conf中你可以设置像这样的东西while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
或者,将max_matches添加到您的查询
max_matches = 10000
请注意,有两个地方强制执行max_matches限制。 每个查询限制由此API调用控制,但也存在 每个服务器限制由配置文件中的max_matches设置控制。 为防止滥用RAM,服务器将不允许设置每个查询 限制高于每服务器限制。
答案 1 :(得分:0)
对于第二部分,请查看->SetSelect()
函数。