Mysql
MySQL EXPLAIN 不顯示 FULLTEXT 的“使用索引”
我有一個基本表:
create table fullTextTest ( id INT(11) NOT NULL, superText CHAR(255) NOT NULL, superLongText TEXT NOT NULL, primary key (`id`), FULLTEXT KEY `superText` (`superText`), FULLTEXT KEY `superLongtext` (`superLongtext`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; insert into fullTextTest set id=1, superText="Hi guys, how is it goin'?", superLongtext="Please give me some dummy text to search on!!!" ; show index from fullTextTest; | fullTextTest | 0 | PRIMARY | 1 | id | A | 1 | NULL | NULL | | BTREE | | | fullTextTest | 1 | superText | 1 | superText | NULL | NULL | NULL | NULL | | FULLTEXT | | | fullTextTest | 1 | superLongtext | 1 | superLongText | NULL | NULL | NULL | NULL | | FULLTEXT | |
現在,讓我們看看 MySQL 是否正確使用了這個索引:
EXPLAIN select * from fullTextTest where match(superText) AGAINST ("guys" IN BOOLEAN MODE); | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------------+----------+---------------+-----------+---------+------+------+-------------+ | 1 | SIMPLE | fullTextTest | fulltext | superText | superText | 0 | | 1 | Using where |
“在哪裡使用”向我展示了 EXPLAIN 不懂 FULLText .. 真的很遺憾。
我錯過了什麼 ?
我能理解為什麼會這樣
表中只有一行。
MySQL 查詢優化器將圍繞此經驗法則執行計劃:如果通過索引檢查查詢執行所需的行數超過總行數的 5%,則查詢優化器將不使用該索引並將改為使用表掃描或索引掃描。
表中有多少行?一
索引了多少行?一
由於您將檢查 100% 的行,因此不會選擇鍵控查找。查詢將被執行。您根本沒有足夠的行來證明在搜尋中涉及索引是合理的。這通常適用於任何索引。FULLTEXT 索引往往會在最不方便的時候被 Query Optimizer 拋棄。我早在 2012 年 1 月 26 日就寫過這篇文章。
嘗試將更多行載入到表中,至少 21 行,然後重試。
中的“額外”
Using index
(不要與 混淆Using index condition
)EXPLAIN
表示 中提到的所有列SELECT
都包含在INDEX
正在使用的列中。在您的查詢中,所有 3 列都被提及(
*
ofSELECT *
),但索引中僅提及一列(superText
)。我所說的適用於
EXPLAIN
甚至所有形式的INDEX
引擎,而不僅僅是FULLTEXT
MyISAM。