Bre*_*zer 19 php mysql search inner-join left-join
我正在为我们公司的内部网构建一个相当大的"搜索"引擎,它有一个1miljon加上条目,它运行在一个相当快的服务器上,但是一些搜索查询需要1分钟.
这就是表格的外观

我尝试为它创建一个索引,但好像我错过了一些东西,这就是show index的显示方式

这是查询本身,它的排序大大减慢了查询,但即使没有排序的查询也有点慢.
SELECT SQL_CALC_FOUND_ROWS *
FROM `businessunit`
INNER JOIN `businessunit-postaddress` ON `businessunit`.`Id` = `businessunit-postaddress`.`BusinessUnit`
WHERE `businessunit`.`Name` LIKE 'tanto%'
ORDER BY `businessunit`.`Premium` DESC ,
CASE WHEN `businessunit`.`Name` = 'tanto'
THEN 0
WHEN `businessunit`.`Name` LIKE 'tanto %'
THEN 1
WHEN `businessunit`.`Name` LIKE 'tanto%'
THEN 2
ELSE 3
END , `businessunit`.`Name`
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)
很感谢任何形式的帮助
编辑:
这个查询有什么窒息99%是通过与wildcharacter的相关性排序%
当我做一个解释它说使用where; 使用fsort
似乎索引没有涵盖Premium,但这是第一个ORDER BY参数.
使用EXPLAIN your query here弄清楚查询计划,改变你的索引中删除任何表扫描在解释http://dev.mysql.com/doc/refman/5.0/en/using-explain.html
MySQL适用于存储数据,但在基于快速文本的搜索时效果不佳.
除了已经建议的Sphinx,我推荐两个出色的搜索引擎:
Solr与http://pecl.php.net/package/solr - 非常受欢迎的搜索引擎.用于像NetFlix这样的大型服务.
弹性搜索 - 相对较新的软件,但拥有非常活跃的社区和很多尊重
这两种解决方案都基于相同的Apache Lucene库