我在mySQL 5.6中具有下表结构:
CREATE TABLE `dictionary` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`word` varchar(80) NOT NULL,
PRIMARY KEY (`id`),
KEY `word` (`word`)
) ENGINE=InnoDB;
CREATE TABLE `sentences` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sentence` varchar(254) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `sentencefulltext` (`sentence`)
) ENGINE=InnoDB;
我想返回所有包含我词典中任何单词的句子。我真的不在乎单词边界,这可能是一个基本的子字符串。
fultText匹配似乎仅与字符串一起使用,而不是从另一个表中选择。至于like和regexp,它们似乎已经花了很长时间了,因为我的字典中有大约500k行句子和50k行的单词。
一个选项是通过程序中的行逐行浏览字典,并在每一行中调用选择,但我宁愿在单个SQL语句中进行。
如果有人有任何想法,请分享。
谢谢!
尝试类似的东西 -
SELECT *
FROM `sentences`,'dictionary'
WHERE INSTR(word,''+sentence+'') > 0
当您使用%符号之类的时 - 没有索引,这就是为什么它太慢,因此您可能需要全文搜索:
http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html