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

时间:2018-02-08 07:57:41

标签: php mysql full-text-indexing

我有一个像这样创建的简单表

for x=1 to 1000000
   call sendSMS(PhoneNumber(x),"test message")
next

function sendSMS(PhoneNumber,message)
    posturl="http://URL TO SMS SERVICE"
    posturl=posturl & "username=user"
    posturl=posturl & "&password=password"
    posturl=posturl & "&dstaddress=" & PhoneNumber
    posturl=posturl & "&message=" & server.Urlencode(message)

    set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
    xmlhttp.Open "POST",posturl,false
    xmlhttp.send
    myresult= xmlhttp.responseText
end function

当我执行全文搜索时,花费了2.5秒,包含1M行。所以我执行一个查询计划器,它不使用任何索引:

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;

这是预期的吗?我怎样才能加快速度呢?

1 个答案:

答案 0 :(得分:1)

您的查询获取表中的每一行,计算自然语言匹配,然后将结果(仍为每一行)传递给HAVING子句。这是一个表扫描。

您应该尝试将全文索引搜索放入WHERE子句中,以减少匹配行的数量。

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