在搜索页面中,用户可以访问前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要慢得多。
答案 0 :(得分:1)
获得更快结果的一种方法是升级您的底层系统。
以下是我见过的两个最受欢迎的选项:
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();
虽然这种方法的表现值得怀疑,但它可能会为你做好准备。
另外,我考虑创建包含部分结果的附加表格,并不时重建。