以前1000条记录的限制获得结果数量的更快方法?

时间:2014-08-02 20:51:46

标签: mysql sql full-text-search

在搜索页面中,用户可以访问前1000个结果。目前我使用以下

SELECT COUNT(*) as count FROM (SELECT * FROM jobs WHERE MATCH (title, company, state, city) AGAINST ('senior software engineer san fransisco california') LIMIT 1000) AS a

为了创造分页。

有没有更快的替代方案?

PS:没有任何限制,一些搜索有10个结果,有些搜索有500,000个结果。

PS 2:我实际上想要获得精确或粗略的结果数量,但它比我目前使用的SQL要慢得多。

2 个答案:

答案 0 :(得分:1)

获得更快结果的一种方法是升级您的底层系统。

以下是我见过的两个最受欢迎的选项:

  • 使用mysql集成的sphinx搜索引擎
  • 的lucene / solr的

Sphinx还有一个额外的好处,即不会影响你的SQL,而是添加一个新的存储引擎到mysql添加到sphinx damon(如果我没有弄错)。

更多信息:

Comparison of full text search engine - Lucene, Sphinx, Postgresql, MySQL?

答案 1 :(得分:0)

尝试使用关键字SQL_CALC_FOUND_ROWS

SELECT SQL_CALC_FOUND_ROWS * FROM jobs WHERE MATCH (title, company, state, city) AGAINST ('senior software engineer san fransisco california') LIMIT 1000

然后,使用

检索估计的行数
SELECT FOUND_ROWS();

虽然这种方法的表现值得怀疑,但它可能会为你做好准备。

另外,我考虑创建包含部分结果的附加表格,并不时重建。