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 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 10
cs






0.7에서 0.2로 !!!


explain rows 는 줄지 않았지만 속도가 빨라진것에 감사.


myisam 을 innodb 로 바꾸고 인덱스 손보니





메인 적용!

Posted by xanasia

블로그 이미지
xanasia

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함