[英]Optimize MySQL search Query
我只是尝试对我的网站进行一些小搜索以查找用户条目并以合理的方式对它们进行排序,我尝试改进结果,但最终得到了一个太大的查询字符串,这需要14秒才能在我的服务器上执行。 所以我现在想知道如何优化查询而不会对结果进行任何更大的更改。
这是我目前的查询:
$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进行预处理来削减查询?
您可以使用一个查询执行此操作。 将不同的搜索条件放在一个case
以分配m_rank
。 就像是:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.