簡體   English   中英

MySQL全文索引查詢不使用任何索引?

[英]MySQL fulltext index query does not use any index?

我有一個像這樣創建的簡單表

CREATE TABLE IF NOT EXISTS metadata (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    title varchar(500),
    category varchar(50),
    uuid varchar(20),
    FULLTEXT(title, category)
) ENGINE=InnoDB;

當我執行全文搜索時,1M 行需要 2.5 秒。 所以我執行了一個查詢規划器,它不使用任何索引:

mysql> explain SELECT uuid, title, category, MATCH(title, category) AGAINST ('grimm' IN NATURAL LANGUAGE MODE) AS score FROM metadata HAVING score > 0 limit 20;
+----+-------------+----------+------------+------+---------------+------+---------+------+---------+----------+-------+
| id | select_type | table    | partitions | type | possible_keys | key  | key_len | ref  | rows    | filtered | Extra |
+----+-------------+----------+------------+------+---------------+------+---------+------+---------+----------+-------+
|  1 | SIMPLE      | metadata | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 1036202 |   100.00 | NULL  |
+----+-------------+----------+------------+------+---------------+------+---------+------+---------+----------+-------+

這是預期的嗎? 我怎樣才能加快速度?

您的查詢獲取表中的每一行,計算自然語言匹配,然后將結果(仍然針對每一行)傳遞給 HAVING 子句。 這是表掃描。

您應該嘗試將全文索引搜索放入 WHERE 子句中,以減少匹配行的數量。

mysql> explain SELECT uuid, title, category FROM metadata 
    WHERE MATCH(title, category) AGAINST ('grimm' IN NATURAL LANGUAGE MODE) 
    LIMIT 20;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM