2016-11-25 105 views
1

如標題所示,您如何知道查詢是否使用FTS索引?MySQL - 如何知道查詢是否使用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

據我所知,如果您使用'MATCH ... AGAINST'並且沒有合適的索引,它只會引發錯誤。與常規查詢不同,這不是可以在沒有索引的情況下獲得的數據。 –

+0

@ÁlvaroGonzález不,這不完全正確。 – Shadow

+0

@Shadow我會很欣賞這方面的一個例子。 MySQL可以搜索「公共房屋」並找到帶有FT索引的「普通房屋」嗎? –

回答

3

答案出現在解釋結果的key列中,列出使用的索引。在這個特殊情況下,使用了news_title索引。如果這是你的全文索引,那麼它就被使用了。

此外,請注意,從fulltext search in Boolean mode on myiasm tables,除了所有的搜索需要匹配的全文索引存在:

的MATCH()列列表必須與列的列表中一些FULLTEXT索引定義匹配表,除非這個MATCH()在MyISAM表中是BOOLEAN MODE。對於MyISAM表,布爾模式搜索可以在非索引列上完成,儘管它們可能很慢。

+0

感謝您的答覆我的答案。是的,我想你是對的,因爲你有什麼說的都差不多在此鏈接上:[鏈接](https://www.percona.com/live/europe-amsterdam-2015/sites/default/files/slides/Query%20Optimization%3A%20From%200%20to%2010%20(和%20up%20to%205.7).pdf) –