티스토리 뷰
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
- JQuery
- laravel
- classic asp
- JSON
- IE
- git
- javascript
- Debug
- PHP
- Android
- 한글
- 워드프레스
- Mac
- nginx
- macos
- 안드로이드
- API
- Prototype
- Linux
- IOS
- iis
- centos
- Wordpress
- nodejs
- CSS
- iphone
- mssql
- Docker
- sencha touch
- ASP
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함