2

所以 - 我有 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...

所以条目可能有多个词条 - 对。所以我只是想对词条中包含特定单词的条目进行分页。我想出的唯一查询需要 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;
4

1 回答 1

0

您应该使用 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%' 来匹配单词的 START,则可以进一步提高其性能。这将进一步提高性能,因为您不再需要考虑每个标题词前面添加的文本。

于 2013-11-08T21:51:27.817 回答