如标题所示,您如何知道查询是否使用FTS索引?
通常会显示using index condition
。
我的疑问是:
SELECT *
FROM news
WHERE MATCH(news_title,news_keywords) AGAINST ('news')
AND news_date_created BETWEEN '2016-01-01' AND '2016-12-31'
并执行EXPLAIN
并给了我:
+----+-------------+-------+------------+----------+--------------------------+------------+---------+-------+------+----------+-------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+----------+--------------------------+------------+---------+-------+------+----------+-------------------------------+
| 1 | SIMPLE | news | NULL | fulltext | news_date_idx,news_title | news_title | 0 | const | 1 | 100.00 | Using where; Ft_hints: sorted |
+----+-------------+-------+------------+----------+--------------------------+------------+---------+-------+------+----------+-------------------------------+
我不知道它是否使用了索引。它只是说它正在使用where and ft_hints
。
答案 0 :(得分:3)
答案在解释结果的key
列中,列出了所使用的索引。在这种特殊情况下,使用了news_title
索引。如果这是您的全文索引,则使用它。
另请注意,除了fulltext search in Boolean mode on myiasm tables之外,所有搜索都需要匹配的全文索引:
MATCH()列列表必须与表的某些FULLTEXT索引定义中的列列表完全匹配,除非此MATCH()在MyISAM表上是IN BOOLEAN MODE。对于MyISAM表,布尔模式搜索可以在非索引列上完成,尽管它们可能很慢。