【发布时间】:2013-11-21 01:03:33
【问题描述】:
所以 - 我有 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;
寻求建议以加快此方法。
EDIT> WAIT - 这是一个错误的查询吗?:
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;
【问题讨论】:
-
听起来像是一个真正的全文搜索引擎的绝佳案例。请参阅slideshare.net/billkarwin/…(作为评论发布,因为它并不能真正回答您的问题。而是避开它:)
-
嘿巴里!我在前端使用 sphinx,但我不想在后端使用它,因为它在单独的服务器上,然后除了 CRUD 之外,我还必须更新 RT 索引。
-
好吧,即使使用内置全文搜索支持的 mysqls 也可能会有所帮助。
-
对于您刚刚添加的最后一个查询,建议在查询中添加 EXPLAIN 的输出。
-
全文搜索支持 > 它只适用于 mysql 5.6,我在 ubuntu 12.04 服务器上使用 5.5:)