어라? 전체 검색속도가........
그누보드 원본(bbs/search.php)
$str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
else
$str .= "INSTR($field[$k], '$search_str')";
RUN TIME : 12.7149419785
수정1
$str .= " $field[$k] like '%$search_str%' ";
RUN TIME : 3.24099111557
수정2
$str .= " $field[$k] like '$search_str%' ";
RUN TIME : 0.471668958664
총게시물(코멘트포함) 41,134개에서 제목+내용으로 테스트
그래서 수정1번으로 바꾸었음....;;;;
2번은 빠르기는 한데 결과값이 만족 스럽지 못해서 배제....
나 잘 했죠^^
$str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
else
$str .= "INSTR($field[$k], '$search_str')";
RUN TIME : 12.7149419785
수정1
$str .= " $field[$k] like '%$search_str%' ";
RUN TIME : 3.24099111557
수정2
$str .= " $field[$k] like '$search_str%' ";
RUN TIME : 0.471668958664
총게시물(코멘트포함) 41,134개에서 제목+내용으로 테스트
그래서 수정1번으로 바꾸었음....;;;;
2번은 빠르기는 한데 결과값이 만족 스럽지 못해서 배제....
나 잘 했죠^^
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기
댓글 12개
대소문자 구별안하는 한국어는 instr 검색이 훨씬 빠른걸로 아는데...
그래서 preg_match("/[a-zA-Z]/", $search_str) 이게 있는거같은데,
영어의 경우는 대소문자 구별할 경우 instr 이 2배정도 빠르고
안할경우는 2배정도 느리고요.
$str .= " $field[$k] like '%$search_str%' ";
else
$str .= "INSTR($field[$k], '$search_str')";
이렇게 하면 더 빠르지 않을까요?
좋은 팁이네요. 감사합니다~
498,150개의 게시물에서 테스트해보니까
그누원본 방식이 26.7325658798 나오구요
수정1번으로 하니까 9.34008789062 나오네요....
like가 3~4배 빠르네요....
듣기로는 union 이 or 보다 3500배 빠르다던데...
select where instr(a,b) or instr(a,c)
를
select where a and b
union
select where a and c
이런식으로요...
.
.
.
그리고 원래 instr 이 like 보다 빠른걸로 알고있는데...
이건 알아듣겠군요 ㅋ
과연... 결론은?
그누 주석에도
// LIKE 보다 INSTR 속도가 빠름
라고 나와있을 텐데...
그거 다 아는데요... 직접 테스트해보니까 LIKE가 빠른걸 어떡해유....ㅉㅉ
50만건에서 LIKE로 테스트 해보니까 더 빠른걸 우짜라고요....ㅡㅡ;;;