Php 优化MySQL搜索查询
我只是尝试对我的网站进行一些小搜索,以找到用户条目并以逻辑方式对它们进行排序,我尝试改进结果,但结果是查询字符串太大,需要14秒才能在我的服务器上执行。因此,我现在想知道如何在不改变结果的情况下优化查询 以下是我当前的查询:Php 优化MySQL搜索查询,php,mysql,sql,search,Php,Mysql,Sql,Search,我只是尝试对我的网站进行一些小搜索,以找到用户条目并以逻辑方式对它们进行排序,我尝试改进结果,但结果是查询字符串太大,需要14秒才能在我的服务器上执行。因此,我现在想知道如何在不改变结果的情况下优化查询 以下是我当前的查询: $query = "SELECT * FROM( SELECT 1 as m_rank,title,rank, content, url, keywords FROM websites WHERE title LIKE '".$search."'
$query = "SELECT * FROM(
SELECT 1 as m_rank,title,rank, content, url, keywords FROM websites
WHERE title LIKE '".$search."'
union all
SELECT 2 as m_rank,title,rank, content, url, keywords FROM websites
WHERE title LIKE '".$search."%'
OR title LIKE '%".$search."'
union all
SELECT 3 as m_rank,title,rank, content, url, keywords FROM websites
WHERE title LIKE '%".$search."%'
union all
SELECT 4 as m_rank,title,rank, content, url, keywords FROM websites
WHERE keywords LIKE '".$search."'
union all
SELECT 5 as m_rank,title,rank, content, url, keywords FROM websites
WHERE keywords LIKE '%".$search."'
OR keywords LIKE '".$search."%'
union all
SELECT 6 as m_rank,title,rank, content, url, keywords FROM websites
WHERE keywords LIKE '%".$search."%'
union all
SELECT 7 as m_rank,title,rank, content, url, keywords FROM websites
WHERE content LIKE '".$search."'
union all
SELECT 8 as m_rank,title,rank, content, url, keywords FROM websites
WHERE content LIKE '%".$search."'
OR content LIKE '".$search."%'
union all
SELECT 9 as m_rank,title,rank, content, url, keywords FROM websites
WHERE content LIKE '%".$search."%'
) a
ORDER BY m_rank, rank DESC LIMIT ".$page.", ".$max;
是否也可以使用PHP进行预处理来剪切查询?您可以通过一个查询来完成此操作。将不同的搜索条件放入
案例中
,以分配m_秩
。比如:
SELECT title, rank, content, url, keywords,
(case when title LIKE '".$search."' then 1
when title LIKE '".$search."%' OR title LIKE '%".$search."' then 2
when title LIKE '%".$search."%' then 3
. . .
else NULL
end) as m_rank
FROM websites
HAVING m_rank is not null
ORDER BY m_rank, rank DESC
LIMIT ".$page.", ".$max;
很好-使用
CASE
()比我以前写过的一些IF
庞然大物要整洁得多:)其他可能的替代方法:FULLTEXT
搜索()或实现类似ApacheLucene()的东西,而不是RYO解决方案。