我有一个MySQL数据库(InnoDB),表users
,username
列。在Ruby on Rails网站上,我有一项功能,使用户可以通过用户名搜索某人。在打字时,网站会建议用户搜索的是谁(打字w / bootstrap)。目前我在MySQL中使用查询SELECT `username` FROM users WHERE `username` LIKE 'the_query%' LIMIT 15;
存在的问题是速度。该表有大约500,000行,这样的查询似乎需要大约秒,这在运行时产生猜测时太慢了。我该怎么做才能提高性能?不到100毫秒的东西是合适的。也许有比使用MySQL处理搜索更好的方法呢?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您只是从username
字符串的开头进行搜索,则与子字符串匹配可能会更快:SELECT `username` FROM users WHERE SUBSTRING(`username`, 0, CHAR_LENGTH('the_query'))='the_query';
答案 2 :(得分:0)
尝试限制您获得的匹配数量。如果是搜索栏,则无法在搜索列表中显示数千条记录。但是从上面的查询中,服务器将所有结果发送到前端,我猜。然后你可以从那里过滤记录。除此之外,请尝试此查询。
将记录数限制为10 ...
SELECT username
FROM users WHERE username
LIKE' the_query%'限制10;
答案 3 :(得分:0)
结束了将Keshan提到的FULLTEXT
索引添加到用户名列(之前只有一个唯一索引),这似乎加速了10倍。查询大约需要90到120毫秒。
答案 4 :(得分:0)
如果您使用username + password创建md5哈希,会更快。因为每行的长度为32个字符,所以您可以在此字段上设置索引,并在索引字段上使用非常快速的搜索。