我有一个MySQL表,它有一个类别列和一个关键字列。类别列可以具有以下两个值之一:category1或category2。 category1中的记录在关键字列中有多个单词,category2中的记录在关键字列中有单个单词。
我需要找到category1中的所有记录,其中关键字包含category2中的关键字作为整个单词。
例如:
id category keyword
1 category1 word1 word2
2 category1 word2 word3
3 category1 word2 word4
4 category2 word1
5 category2 word3
在此示例中,将检索记录1和2。
我尝试了以下查询:
select sn1.category, sn1.keyword
from keyword_set sn1
join keyword_set sn2
on (
sn1.keyword like concat(sn2.keyword, ' %') or
sn1.keyword like concat('% ', sn2.keyword, ' %') or
sn1.keyword like concat('% ', sn2.keyword)
)
where sn1.category = category1
and sn2.caegory = category2
这有效,但对于大量记录而言太慢了。
我也尝试了REGEXP '[[:<:]]word[[:>:]]'
类型搜索,但速度也太慢了。
我在关键字列上有一个索引。
有没有办法有效地做到这一点?