簡體   English   中英

mysql分頁與左聯接和喜歡->超級慢

[英]mysql pagination with left join and LIKE -> super slow

所以-我有2張桌子:

entries表:

id - Primary key
meta_keys VARCHAR 20
meta_desc VARCHAR 20
..some other unimportant columns...

headwords表:

id -  Primary key
fk_entries_id - foreign key refers to entries(id)
headword_text VARCHAR(200)
..some other unimportant columns...

因此,條目可能具有多個headwords-對。 因此,我只是想對headwords中帶有特定單詞的條目進行分頁。 我提出的唯一查詢要求先按LEFT JOIN,再按LIKE,這有點慢。

SELECT entries.*, GROUP_CONCAT(DISTINCT headwords.headword_text SEPARATOR ' ') AS hw 
FROM entries 
LEFT JOIN headwords ON (entries.id = headwords.fk_entries_id) 
GROUP BY entries.id
HAVING hw LIKE '%dog%' 
LIMIT 20,20;

尋求建議以加快此方法。

編輯>等待-這將是一個錯誤的查詢嗎?:

SELECT entries.id, GROUP_CONCAT(DISTINCT headwords.headword_text SEPARATOR ' ') AS hw 
FROM entries 
LEFT JOIN headwords 
ON (entries.id = headwords.fk_entries_id) 
WHERE headwords.headword_text LIKE 'dog%' 
GROUP BY entries.id;

您應該使用IN比較來避免所有字符串連接和正在執行的搜索:

select e.*
from entries e
where e.id IN (
   select distinct fk_entries_id
   from headwords
   where headword_text like '%dog%'
)
order by e.id
limit 20,20;

此外,如果僅通過用'dog%'替換'%dog%'來匹配單詞的開頭,則可以進一步提高其性能。 這將進一步提高性能,因為您不再需要考慮每個標題詞前面添加的文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM