2015. 7. 23. 09:07 IT/mysql
mysql order by rand() 랜덤 속도 튜닝하기
order by rand() 를 부득이하게 사용해야하는 상황이 왔음
where절로 카운트해보니 37,321 개
rand() 결과 속도는 0.7 ~ 1.2초.
관리자 페이지라면 몰라도 사이트 메인에 반영되어야 하는 상황
1 2 3 4 5 6 7 8 9 10 11 | SELECT SQL_NO_CACHE * FROM `sales` WHERE sold = 'N' AND view = '1' AND lock = '0' AND confirm = 1 ORDER BY RAND() LIMIT 0 , 10 | cs |
explain 해보니 rows가 57,142개
더이상 where절로 줄일것도 안나옴.
망.
여기서 꼼수
php를 이용해서 pk 에 랜덤 00부터 99까지 like 해버리면?
실행
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT SQL_NO_CACHE * FROM `in_sales` WHERE no like '%76' AND sold = 'N' AND view = '1' AND lock = '0' AND confirm = 1 ORDER BY RAND() LIMIT 0 , 10 | cs |
0.7에서 0.2로 !!!
explain rows 는 줄지 않았지만 속도가 빨라진것에 감사.
myisam 을 innodb 로 바꾸고 인덱스 손보니
굳
메인 적용!