1

我在 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;

我想返回包含字典中任何单词的所有句子。我真的不关心单词边界,它可以是一个基本的子字符串。

全文 MATCH AGAINST 似乎只适用于字符串,而不是从另一个表中选择。至于 LIKE 和 REGEXP,它们似乎需要很长时间,因为我的字典中有大约 500k 行句子和 50k 行单词。

一种选择是在程序中逐行浏览字典并在每一行上调用一个选择,但我宁愿在单个 SQL 语句中执行此操作。

如果有人有任何想法,请分享。

谢谢!

4

1 回答 1

0

尝试这样的事情 -

 SELECT *
      FROM `sentences`,'dictionary'
     WHERE INSTR(word,''+sentence+'') > 0

当您将 like 与 % 符号一起使用时-没有索引,这就是它太慢的原因,因此您可能需要全文搜索:

http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

于 2012-11-07T13:58:39.647 回答