2009-12-24 2 views
5

같은 간단한에 대하여 : 특정 순서로 결과를 검색 할 DB를 조회 한 후MySQL의 일치 ... 대 "% 용어 %"잘못 무엇

$term = $_POST['search']; 

function buildQuery($exploded,$count,$query) 
{ 
    if(count($exploded)>$count) 
    { 
     $query.= ' AND column LIKE "%'. $exploded[$count] .'%"'; 
     return buildQuery($exploded,$count+1,$query); 
    } 
    return $query; 
} 

$exploded = explode(' ',$term); 
$query = buildQuery($exploded,1, 
'SELECT * FROM table WHERE column LIKE "%'. $exploded[0] .'%"'); 

하고, 대신 MYISAM 전용 사용 SQL 일치 ... 반대?

성능이 현저하게 떨어질까요?

+0

btw 나는이 주제가 완전히 저주 받았고 학대를 당했다는 것을 알고있다. – Gal

답변

6

차이점은 MySQL이 사용자의 데이터를 찾는 데 사용되는 알고리즘에 있습니다. 전체 텍스트 검색을 통해 관련성에 따라 정렬 할 수도 있습니다. 대부분의 조건에서 LIKE 검색은 전체 테이블 스캔을 수행하므로 데이터 양에 따라 성능 문제가 발생할 수 있습니다. 전체 텍스트 집합을 처리 할 때 전체 텍스트 엔진에 성능 문제가 발생할 수도 있습니다.

다른 점은이 코드에 추가 할 것은 전개 된 값을 벗어나는 것입니다.

http://forge.mysql.com/wiki/Practical_Full-Text_Search_in_MySQL

슬라이드도 여기에 있습니다 : : 내 테스트에서

http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

, 사용 아마도 mysql_real_escape_string()

+0

성능을 저해하는 아이디어가 있습니까? 물론 네가 맞다면 mysql_real_escape_string()이 잘 배치 될 것이다. – Gal

+0

검색과 같은 개인적인 경험을 통해 더 많은 실적을 얻는 경향이 있습니다. 이것은 mysql이 쿼리를 필드의 인덱스로 최적화 할 수없는 와일드 카드를 사용할 때 가장 사실입니다. –

6

를 호출 당신은 내가 MySQL을 대학에서했던 내 최근 프리젠 테이션을 확인하실 수 있습니다 LIKE '%pattern%'은 MySQL FULLTEXT 색인을 사용하는 것보다 300 배 이상 느립니다. 내 테스트 데이터는 StackOverflow October 데이터 덤프의 게시물이 150 만 개였습니다.

+0

비교 방법이 조금 잘못되었다는 것이 두려워요. 큰 테이블에서 검색 할 때 LIKE는 느리지 만 DB에 대한 데이터 삽입 속도에는 영향을주지 않습니다. 일치하는 항목은 검색 할 때 더 우수한 성능을 제공하지만 각 INSERT 또는 UPDATE에 다시 색인해야하므로 삽입 속도에 심각한 영향을 미칩니다. 따라서 어떤 작업이 우선 순위가 높은지 개발자에게 달려 있습니다. –

+0

기존 데이터 세트의 색인 생성 성능을 비교했지만 더 많은 데이터를 삽입하는 성능을 테스트하지는 못했습니다. MySQL의 전체 텍스트 인덱싱은 삽입 할 때 전체 데이터 세트를 다시 색인화해야한다고 생각하지 않습니다. 스핑크스 만이 필요로하는 한 알고 있습니다. –

+0

필자가 아는 한, MySQL 전체 텍스트 인덱스는 각 삽입 또는 업데이트 작업 후에 자동으로 다시 인덱싱됩니다. 내가 틀렸다면 풀 텍스트 인덱스가 삽입을 2 배 느리게하는 이유를 말해 줄 수 있습니까? Btw, 스핑크스의 새 버전은 실시간 색인 생성을 지원하지만 대부분의 경우 이러한 종류의 색인은 효율성이 떨어집니다. –