티스토리 뷰

Select ... Limit 2000, 1000; 과 같은 페이지 나누는 쿼리 튜닝을 조사하다가

커버링 인덱스 (http://gywn.net/2012/04/mysql-covering-index/) 에 대해 알게 되었고

운영중인 mysql DB 서버에 쿼리를 날려보았다.


일반적 limit 쿼리일 경우 53.8ms ~ 63.1 ms 의 조회 시간이 소요되던것이

커버링 인덱스 쿼리일 경우 23.6 ms 로 1/2 속도 향상이 있음을 알 수 있었다.


아래와 같은 커버링 인덱스 쿼리를

select a.* 

from ( 

    select ID from ARTICLE order by UID limit 50000, 10000

) b JOIN ARTICLE a ON b.ID = a.ID;

Laravel 의 쿼리 빌더로는 어떻게 표현해야 할 수 있을까?


커버링 인덱스가 self join 의 구조를 가지기에

아래와 같이 표현하면 된다.

$subSql = DB::table("ARTICLE")->orderBy("ID")->skip("50000")->take("10000");

$rows = DB::table("ARTICLE as a")->join(DB::raw("({$subSql->toSql()}) as b"), "a.ID", "=", "b.ID")->mergeBindings($subSql)->select("a.*")->get();


참고

https://stackoverflow.com/a/30587685

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/06   »
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
글 보관함