我在MySql中有一个用户详细信息表,其中包含大约500000条记录。我还在此表的firstname,lastname字段上创建了全文索引。但是当我试图搜索任何单个后者/字母(例如a到z,单个字符)时,它在第一次响应非常慢。这需要大约5-6秒的时间来回应。之后,它降至800毫秒。 EXPLAIN命令似乎没问题,因为它在类型列中显示“全文”,但我无法找到它为什么反应非常慢。
我的查询如下所示。
SELECT SQL_NO_CACHE usr.id, usr.uname, ifnull(usr.fullname,'') fullname,
ifnull(ct.City, '') city,
MATCH(usr.fname,usr.lname) AGAINST('a*' IN BOOLEAN MODE) ordfld
FROM usertable usr
LEFT JOIN citymas ct ON ct.CityID = upm.CityID
WHERE usr.UserStatus IN(10,11)
AND usr.id <> 1
AND MATCH(usr.fname,usr.lname) AGAINST('a*' IN BOOLEAN MODE) > 0
ORDER BY ( CASE WHEN usr.fullname = 'a' THEN 1
WHEN usr.fname rlike 'a%' THEN 2
WHEN usr.lname LIKE 'a%' THEN 3
WHEN usr.fname like '%a' THEN 6
WHEN usr.lname LIKE '%a' THEN 7
WHEN usr.fullname LIKE '%a%' THEN 8
ELSE 10 END ),
ordfld DESC,
( CASE WHEN ifnull(usr.cityid,0) = 234 THEN '0' ELSE '1' END ), usr.fullname
LIMIT 20
并向我解释
1, 'SIMPLE', 'usr', 'fulltext', 'PRIMARY,IX_usertable_fname_lname', 'IX_usertable_fname_lname', 0, NULL , 1, 'Using where; Using filesort'
1, 'SIMPLE', 'ct' , 'eq_ref' , 'PRIMARY' , 'PRIMARY' , 3, 'usr.cityid', 1, NULL
以上查询花费了太多时间,它在800-900ms之间响应。
有什么猜测吗?
编辑:
ft_min_word_len有问题吗?当我在localhost中更改它并再次重建索引时,同样的查询在500ms内返回。如果我想在Amazon RDS上更改此内容,我该如何做?