有问题的查询中的 "AND title <> 'MySQL'" 是否使用全文索引?

Does "AND title <> 'MySQL'" in the query in question use full text indexing?

我正在处理一个查询,希望尽可能提高它的效率。

Table 就像:

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    FULLTEXT (title)
) Engine=MyISAM;

需要高效的查询:

SELECT * FROM articles 
WHERE 
MATCH (title)
  AGAINST ('+MySQL' IN BOOLEAN MODE)
  AND title <> 'MySQL';

关于上述查询,我​​有 2 个问题:

  1. 是否AND title <> 'MySQL'使用了全文索引?
  2. 我们可以提高效率吗?

您可以在此处找到 fiddle http://www.sqlfiddle.com/#!9/268411/2/0

Do AND title <> 'MySQL' used full text index?

没有。

第一个术语,MATCH...AGAINST 将使用全文索引,select 仅使用标题中出现该词的行。这将导致查询仅检查匹配的行。

然后,检查这些行,第二项将进一步过滤标题不仅仅是单个单词的行 'MySQL'。标题仍将 包含 'MySQL' 但它们也必须有其他词(或至少一些其他字符)。

Can we make it more efficient?

不适用于 MySQL。

我相信优化器会选择使用全文索引进行 MATCH...AGAINST 搜索,或者它将 B-tree 索引用于另一种类型的谓词,但不会同时使用两者。

如果你想让它更有效率,你必须用其他搜索引擎索引数据,例如ElasticSearch 或 Sphinx 搜索。