해싸 검색 속도 개선
검색 쿼리를 최적화 했습니다.
알아들을 만한 내용은 아니지만, 기록으로 남기기 위해 작성
증상:
- 해싸 검색으로 인한 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체라';
이거 패치하느라 팀피 쳐발림 ㅋㅋ