2016-09-18 66 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的全文搜索之前清理查詢的名稱。

我希望這個解決方案適合你。