2016-09-18 60 views
0

首先,我已经研究了这个问题,并在这里经历了很多关于这个问题的建议,但是很多人都怀疑我们是否具有良好的性能。搜索包含特殊字符的用户名

所以我的问题:

我有一个用户名表格,并且想要为用户提供的可能性,以寻求他人以自己的名字。由于这些名字都是从Steam取得的,所以不包含某种形式的特殊字符的名字是少数。

最简单的解决方案是使用LIKE name%,但随着表格大小的不断增加,我不认为这是最好的解决方案,即使它可能是唯一的解决方案。

我试过使用全文搜索,但许多特殊字符粉碎了这个想法。

任何其他解决方案或我坚持与LIKE

当前表行:120K +

+0

对于更复杂的搜索查询,您可以使用regexp('where用户名regexp '),但如果LIKE功能足够满足您的需求,那么LIKE将更有效。另外,120k行并不多,mysql可以轻松处理。 – baao

+0

我假设使用索引,并且只在搜索字符串的末尾使用通配符可以否定某些“性能损失”? –

+0

是的,我想也是 – baao

回答

0

好吧,我不相信,字符串函数是快,但当代的我不得到的测试性能有任何大的数据库。让我们试试看:

WHERE substr(name, 1, CHAR_LENGTH('ste')) = 'ste' 
+0

有趣的想法,绝对要试一试。谢谢 –

0

我想建议一个我以前申请的解决方案。

  1. 首先,我从名称列中的字符串中清除所有特殊字符。
  2. 然后,我将清理过的字符串存储在另一列(称为“清除名称”)和索引(全文搜索)中,而不是原始列。
  3. 最后,我在步骤1中使用了相同的函数来在执行clean_name的全文搜索之前清理查询的名称。

我希望这个解决方案适合你。