[英]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.