【发布时间】:2013-01-11 17:52:42
【问题描述】:
我正在为我们公司的 Intranet 构建一个相当大的“搜索”引擎,它有 1miljon 以及多个条目 它在相当快的服务器上运行,但某些搜索查询最多需要 1 分钟。
这就是表格的样子
我尝试为它创建一个索引,但似乎我遗漏了什么,这就是显示索引的显示方式
这是查询本身,主要是排序减慢了查询速度,但即使是没有排序的查询也有点慢。
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
非常感谢任何帮助
编辑:
使这个查询窒息 99% 是按与通配符 % 的相关性排序
当我进行解释时,它说使用 where;使用 fsort
【问题讨论】:
-
更改查询:删除查询的某些部分并再次运行(反复试验),您可以自己找出导致结果变慢的部分。
-
当然可以,但问题仍然存在,我应该如何继续按相关性排序,但又要保持快速
-
你试过
EXPLAIN SELECT吗? -
你找到减速的部分了吗?例如:删除所有order by,然后测试,如果它很慢,那么它不是order by,删除where子句等,您应该确定确切的部分
-
你能告诉我们它加入的另一个表的结构吗?
标签: php mysql search left-join inner-join