문제

나는 통제 할 수없는 프로세스로 채워진 4 천만 레코드가 포함 된 MySQL 테이블이 있습니다. 데이터는 매달 한 번만 추가됩니다. 이 테이블은 이름 열에서 검색 할 수 있어야합니다. 그러나 이름 열에는 'Last First Middle'형식의 전체 이름이 포함되어 있습니다.

Sphinx.conf에서 나는 가지고있다

sql_query = SELECT Id, OwnersName,
substring_index(substring_index(OwnersName,' ',2),' ',-1) as firstname, 
substring_index(OwnersName,' ',2) as lastname
FROM table1

Sphinx Search를 사용하여 FirstName 및/또는 LastName으로 검색하려면 어떻게합니까? 이름만으로 '스미스'를 검색하고 싶습니까?

도움이 되었습니까?

해결책

다른 답변으로 판단하면 Sphinx의 검색을 특정 필드로 제한하려면 Extended (또는 Extended2) 일치 모드를 사용한 다음 다음 쿼리 문자열을 사용해야합니다. @firstname Smith.

다른 팁

SQL 쿼리의 로우 당 기능은 항상 커질 수있는 테이블에 대한 나쁜 아이디어입니다. 열의 일부에서 검색하려면 자체 열로 추출하여 인덱싱해야합니다.

스키마에 대한 전원이있는 경우 (모집단 프로세스와 달리) 소유자 이름에서 ownersfirstname 및 ownerslastname이라는 새 열을 ansernersname에서 관련 정보를 추출하고 새 열을 적절하게 추출하는 업데이트/삽입 트리거를 삽입하는 것이 좋습니다.

이것은 이름을 파악하는 데 드는 비용이 행이 변경 될 때만 완료되는 것을 의미합니다. 매번 쿼리를 실행합니다. 그것이 적절한시기입니다.

그런 다음 쿼리가 맹목적으로 빠르게됩니다. 그렇습니다. 이것은 3NF를 깰 수 있지만 대부분의 사람들은 결과를 이해한다면 공연의 이유로 그렇게해도 괜찮다는 것을 깨닫지 못합니다. 그리고 새로운 열은 트리거에 의해 제어되므로 우려의 원인이 될 데이터 복제는 "깨끗합니다"입니다.

사람들이 데이터베이스에서 가지고있는 대부분의 문제는 쿼리 속도입니다. 많은 양의 성능 개선을 얻기 위해 약간의 디스크 공간을 낭비하는 것은 일반적으로 괜찮습니다.

당신이 절대적으로 있다면 아니요 스키마에도 전원을 공급하십시오. 또 다른 가능성은 "올바른"스키마를 사용하여 고유 한 데이터베이스를 만들고 실제 데이터베이스에서 주기적으로 채우는 것입니다. 그런 다음 쿼리하십시오. 그러나 매월 공정한 데이터 전송이 포함될 수 있지만 첫 번째 옵션은 허용 된 경우 더 나은 옵션입니다.

서브 스트링을 사용하여 검색하려는 필드의 일부를 가져올 수 있지만 프로세스가 느려집니다. 쿼리는 어떤 종류의 색인을 사용할 수 없어 비교를 수행 할 수 없으므로 테이블의 각 레코드를 터치해야합니다.

가장 좋은 것은 같은 필드에 여러 값을 저장하는 것이 아니라 이름 구성 요소를 세 개의 개별 필드에 넣는 것입니다. 필드에 둘 이상의 값을 저장하면 거의 항상 데이터에 액세스하는 데 문제가 있습니다. 나는 이것을 다른 포럼에서 반복해서 본다 ...

Fulll 이름은 접두사, 접미사, 중간 이름 및 중간 이름, 복합 이름 및 하이픈이 있거나없는 성을 포함 할 수 있기 때문에 다루기 어려운 문제입니다. 100% 신뢰성으로이를 수행 할 수있는 방법은 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top