快速字符串匹配MySQL查询

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

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

  • 在用户表中创建索引以获得快速结果(这将有助于更快地提供结果)。
  • 确保用户在输入某个字符后获得结果(不仅仅是单字符搜索)。

如果你只是从username字符串的开头搜索,那么匹配子字符串可能会更快: SELECT `username` FROM users WHERE SUBSTRING(`username`, 0, CHAR_LENGTH('the_query'))='the_query';

尽量限制你获得的匹配数量。 如果是搜索栏,则无法在搜索列表中显示数千条记录。 但是从上面的查询中,服务器将所有结果发送到前端,我猜。 然后你可以过滤掉那些记录。 除此之外,请尝试此查询。

将记录数限制为10 …

SELECT username FROM users WHERE username LIKE’the_query%’LIMIT 10;

结束了FULLTEXT在用户名栏中提到的FULLTEXT索引(之前只有一个独特的索引),这似乎加速了10倍。 查询大约需要90到120毫秒。

如果您从用户名+密码创建md5哈希,它会更快。 因为每行的长度总是32个字符,所以您可以在此字段上设置索引,并在索引字段上使用非常快速的搜索。