我有一个像这样创建的简单表
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;
这是预期的吗?我怎样才能加快速度呢?
答案 0 :(得分:1)
您的查询获取表中的每一行,计算自然语言匹配,然后将结果(仍为每一行)传递给HAVING子句。这是一个表扫描。
您应该尝试将全文索引搜索放入WHERE子句中,以减少匹配行的数量。
mysql> explain SELECT uuid, title, category FROM metadata
WHERE MATCH(title, category) AGAINST ('grimm' IN NATURAL LANGUAGE MODE)
LIMIT 20;