2014-01-30 2 views
0

단일 열 이름으로 약 500,000 행의 레코드 세트를 가정 할 때 Jquery의 자동 완성과 함께 사용하는 것이 더 빠를 것이 아닌지 궁금합니다.PHP 문자열 비교 대 Mysql 유사 %

memcache에 행을 저장하고 PHP에서 메모리를 꺼내 문자열 비교를 수행하십시오.

또는

를 사용하여 MySQL과 유사한을 수행 할 '%%'검색어에 대해.

+2

@PeeHaa SO에 게시하고 다른 사용자를 테스트하는 것이 더 사소한 경우 : –

+1

memcached에서 "% foo %와 (와) 같은"값을 가져옵니다. Memcached는 쿼리 소스가 아닌 * 캐시 *로 사용하면 좋습니다. – user2864740

+1

@ DigitalChris 누군가가 이미 그것을하고 결과를 게시 할 수 있습니다 바라고 – endyourif

답변

-1

이러한 질문은 추측 할 수 없습니다. 그렇게 말하면, 옵션 2가 더 빠를 것이라고 생각합니다.

나는 둘 다 시도 할 때까지 결정을 내리지 못했고 그때조차도 제 3의 대안을 시도해 보았습니다.

+1

답변에 대한 답변이 아닙니다. –

1

"PHP 솔루션"은 SQL 쿼리 필터를 다시 구현하는 것처럼 들리지만, 단지 strpos을 적절하게 사용해야하고 단순한 동등성을 사용하면 안됩니다.

가장 큰 SQL은/​​일반적으로 쿼리, 또는 정말 쿼리 LIKE, making sure that they are able to utilize indexes이다와 일 - 이것은 일반적으로 "전체 텍스트"를 사용하여, foo% 필터, building a de-normalized reverse index에 제한을 의미합니다 (MySQL은 그 자체 만 접두사 와일드 카드를 할 수 있습니다), 아니면 그냥 전체 테이블 스캔으로 괜찮습니다.

나는 빠른 전체로 SQL을 기대 - 때문에 심지어 적은 데이터는 반드시 전체 테이블 스캔에 - 확실히 알 수있는 유일한 방법은 실제 사용 조건에서 성능 벤치 마크/프로파일을 작성 에 있지만 전송할 수 있습니다 (그리고 PHP 방법은 독창적 인 솔루션을 사용하는 것처럼 들리지 않습니다).

한편, memcached는 의 결과를 SQL/LIKE 쿼리에 캐싱하는 데 유용합니다. 즉, 쿼리가 필터 값에 따라 memcached에 저장된 100 개의 결과로 제한됩니다.

동일한 필터가 클라이언트에서 제공되는 경우 memcached는 정확한 키를 기반으로 항목을 찾고 SQL로 이동할 필요가 없습니다. 발견 된 캐시 된 항목은 기본 SQL/LIKE 쿼리에 의해 이미 필터링되어 있으므로 직접 반환. (그러면 캐시가 가까운 미래에 다시 쿼리 될 수있는 정보 만 처리하는지 확인하는 게임이됩니다.)