快速字符串匹配MySQL查询

时间:2015-01-13 04:41:23

标签: mysql ruby-on-rails

我有一个MySQL数据库(InnoDB),表usersusername列。在Ruby on Rails网站上,我有一项功能,使用户可以通过用户名搜索某人。在打字时,网站会建议用户搜索的是谁(打字w / bootstrap)。目前我在MySQL中使用查询SELECT `username` FROM users WHERE `username` LIKE 'the_query%' LIMIT 15;

存在的问题是速度。该表有大约500,000行,这样的查询似乎需要大约秒,这在运行时产生猜测时太慢了。我该怎么做才能提高性能?不到100毫秒的东西是合适的。也许有比使用MySQL处理搜索更好的方法呢?

5 个答案:

答案 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个字符,所以您可以在此字段上设置索引,并在索引字段上使用非常快速的搜索。