我正在做一个查询,如果可能的话,想让它更有效率。
表是这样的。
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个问题。
AND title <> 'MySQL'
用过的全文索引?你可以在这里找到提琴 http:/www.sqlfiddle.com#!926841120
做
AND title <> 'MySQL'
使用了全文索引?
ぃ。
第一个术语。MATCH...AGAINST
将使用全文索引,只选择标题中出现该词的记录。这将导致查询只检查匹配的行。
然后,在检查这些记录时,第二个术语将进一步过滤标题中不仅仅是 "MySQL "这个词的记录。标题仍然会是 包含 'MySQL',但他们也必须有其他的字(或至少有一些其他的字符)。
我们能不能让它更有效率?
用MySQL就不行。
我相信优化器要么会选择用全文索引来为 MATCH...AGAINST
搜索,或者它会使用B-tree索引来处理另一种类型的谓词,但不能同时使用两种。
如果你想让它更高效,你就必须用其他搜索引擎来索引数据,比如ElasticSearch或Sphinx Search。