Skip to content
다크 모드

해싸 검색 속도 개선

조회 수
2,688
추천 수
0
등록일



검색 쿼리를 최적화 했습니다.


알아들을 만한 내용은 아니지만, 기록으로 남기기 위해 작성


증상:

  • 해싸 검색으로 인한 DB부하
  • REGEXP 검색은 인덱스를 타지않고 LIKE 보다 무거운데, LIKE 가능한 부분까지 REGEXP 검색하고 있음.


패치:

  • LIKE/REGEX 절을 마지막에 처리하기 - php 단에서 push 대신 array_unshift 함수로 조정
  • REGEX 보다 LIKE 선행 (performance)
  • 항상 REGEX 쓰던 것을 LIKE 가능한 경우 LIKE 대체


테스트 검색어: 80-체라 10패 마나 매|레


조건

Array

(

    [0] => (options LIKE '%매%' OR options LIKE '%레%')

    [1] => options LIKE '%체라%'

    [2] => options LIKE '%10패%'

    [3] => options LIKE '%마나%'

    [4] => options REGEXP '(^|[^0-9])(8[0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9])체라'

    [5] => options REGEXP '(^|[^0-9])10패'

)


sql

SELECT * FROM xe_d2_bot_a1s WHERE (options LIKE \'%매%\' OR options LIKE \'%레%\') AND options LIKE \'%체라%\' AND options LIKE \'%10패%\' AND options LIKE \'%마나%\' AND options REGEXP \'(^|[^0-9])(8[0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9])체라\' AND options REGEXP \'(^|[^0-9])10패\' ORDER BY price=0,price ASC LIMIT 100


더 이상 % 기호 사용하지 않는데, 예전에 % 적용된 데이터 처리:

#SELECT * FROM `xe_d2_bot_a1s` WHERE `options` REGEXP '%';


UPDATE xe_d2_bot_a1s SET options = REPLACE(options, '%중감', '중감') WHERE `options` REGEXP '%중감';

UPDATE xe_d2_bot_a1l SET options = REPLACE(options, '%중감', '중감') WHERE `options` REGEXP '%중감';


UPDATE xe_d2_bot_a1s SET options = REPLACE(options, '%마돌', '마돌') WHERE `options` REGEXP '%마돌';

UPDATE xe_d2_bot_a1l SET options = REPLACE(options, '%마돌', '마돌') WHERE `options` REGEXP '%마돌';


UPDATE xe_d2_bot_a1s SET options = REPLACE(options, '%파뎀', '파뎀') WHERE `options` REGEXP '%파뎀';

UPDATE xe_d2_bot_a1l SET options = REPLACE(options, '%파뎀', '파뎀') WHERE `options` REGEXP '%파뎀';


UPDATE xe_d2_bot_a1s SET options = REPLACE(options, '%콜뎀', '콜뎀') WHERE `options` REGEXP '%콜뎀';

UPDATE xe_d2_bot_a1l SET options = REPLACE(options, '%콜뎀', '콜뎀') WHERE `options` REGEXP '%콜뎀';


UPDATE xe_d2_bot_a1s SET options = REPLACE(options, '%라뎀', '라뎀') WHERE `options` REGEXP '%라뎀';

UPDATE xe_d2_bot_a1l SET options = REPLACE(options, '%라뎀', '라뎀') WHERE `options` REGEXP '%라뎀';


UPDATE xe_d2_bot_a1s SET options = REPLACE(options, '%최대마나', '최대마나') WHERE `options` REGEXP '%최대마나';

UPDATE xe_d2_bot_a1l SET options = REPLACE(options, '%최대마나', '최대마나') WHERE `options` REGEXP '%최대마나';


UPDATE xe_d2_bot_a1s SET options = REPLACE(options, '%추가어레', '추가어레') WHERE `options` REGEXP '%추가어레';

UPDATE xe_d2_bot_a1l SET options = REPLACE(options, '%추가어레', '추가어레') WHERE `options` REGEXP '%추가어레';


UPDATE xe_d2_bot_a1s SET options = REPLACE(options, '%3체라', '3체라') WHERE `options` REGEXP '%3체라';

UPDATE xe_d2_bot_a1l SET options = REPLACE(options, '%3체라', '3체라') WHERE `options` REGEXP '%3체라';


UPDATE xe_d2_bot_a1s SET options = REPLACE(options, '%5체라', '5체라') WHERE `options` REGEXP '%5체라';

UPDATE xe_d2_bot_a1l SET options = REPLACE(options, '%5체라', '5체라') WHERE `options` REGEXP '%5체라';


이거 패치하느라 팀피 쳐발림 ㅋㅋ


디아블로2 d2nt

가입인사 작성 후 다운로드, 게시글/댓글 등록이 가능합니다.
가입인사 게시판에 작성한 내용은 자기소개글로 자동 등록됩니다.
댓글 78
권한이 없습니다.
다크 모드