2016-09-18 2 views
0

처음에는이 문제를 살펴본 결과 여기에 나와있는 많은 제안 사항을 살펴 보았지만 많은 사람들이 성능면에서 좋은지 의심 스럽습니다. 특수 문자가 포함 된 사용자 이름 검색

그래서 내 문제 :

나는 사용자 이름과 테이블이 자신의 이름으로 다른 사람을 검색하는 사용자에게 가능성을 제공합니다. 이 이름들이 스팀에서 취해지기 때문에, 특수 문자의 일부 형태를 포함하지 않는 이름은 소수에 있습니다.

가장 쉬운 해결책은 LIKE name%을 사용하는 것이지만 테이블 크기가 계속 커지면서 유일한 해결책 일지 모르지만 최상의 솔루션이라고 생각하지 않습니다.

전체 텍스트 검색을 시도했지만 많은 특수 문자가 그 아이디어를 짓밟 았습니다.

다른 해결책이 있습니까? 아니면 LIKE으로 붙어 있습니까?

현재 테이블 행 : 120K +

+0

좀 더 복잡한 검색 쿼리를 위해 regexp ('username username regexp ')를 사용할 수 있습니다. 그러나 'LIKE'는 그 기능이 충분할 경우 더 성능이 좋습니다. 또한, 120k 행은 그리 많지 않습니다. mysql은 이것을 쉽게 처리 할 수 ​​있습니다. – baao

+0

인덱스를 사용한다고 가정하고 검색 문자열 끝에 와일드 카드 만 사용하면 "성능 손실"중 일부가 무효화 될 수 있습니까? –

+0

그래, 나도 그렇게 생각한다 – baao

답변

0

그럼 난 그 문자열 기능을 생각하지 않는다 더 빨리, 그러나 현대 나는 테스트 성능을 위해 어떤 큰 데이터베이스를 가지고하지 않습니다. 시도해 보겠습니다.

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

흥미로운 아이디어, 분명히 그것을 시도 할 것입니다. 감사 –

0

이전에 적용한 하나의 해결책을 제안하고자합니다.

  1. 우선 이름란의 문자열에서 모든 특수 문자를 지 웁니다.
  2. 그런 다음 정리 된 문자열을 다른 열 (cleaned_name)에 저장하고 원본 열 대신 색인 (fulltext search)을이 열에 저장합니다.
  3. 마지막으로 cleaned_name에서 전체 텍스트 검색을 실행하기 전에 쿼리 된 이름을 정리하기 위해 동일한 기능을 1 단계에서 사용했습니다.

이 솔루션을 사용하기 바랍니다.

관련 문제