티스토리 뷰
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();
참고
'웹프로그래밍 > PHP' 카테고리의 다른 글
[책 후기] 바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서 (0) | 2018.02.04 |
---|---|
Laravel 4.2 queue + redis + sqlite 구성 셋팅 (2) | 2017.08.30 |
angle brackets 로 감싸진 <문장> 보존하고 html 태그 제거하고 plain text 얻기 (0) | 2016.12.21 |
macOS 용 docker 상의 php Xdebug 와 PHPStrom 연동 방법 (0) | 2016.11.15 |
PHP 에서 UTC 날짜 KST 로 변환 (0) | 2016.11.09 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Wordpress
- javascript
- Docker
- nginx
- API
- PHP
- macos
- mssql
- iis
- Debug
- iphone
- 안드로이드
- IE
- CSS
- Mac
- centos
- laravel
- git
- 한글
- Android
- JSON
- nodejs
- IOS
- ASP
- Linux
- classic asp
- 워드프레스
- sencha touch
- JQuery
- Prototype
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함