EXPLAIN
EXPLAIN
이 페이지는 SQLite의 EXPLAIN 명령에 대해 설명해요. EXPLAIN을 사용하면 SQL 문이 실행되는 방식을 보여주는 가상 머신 명령어 목록을 얻을 수 있어요. 이를 통해 쿼리 실행 계획을 이해하고 최적화할 수 있어요.
출처: 문서
본문
1. 문법
sql-stmt:
EXPLAIN QUERY PLAN alter-table-stmt analyze-stmt attach-stmt begin-stmt commit-stmt create-index-stmt create-table-stmt create-trigger-stmt create-view-stmt create-virtual-table-stmt delete-stmt delete-stmt-limited detach-stmt drop-index-stmt drop-table-stmt drop-trigger-stmt drop-view-stmt insert-stmt pragma-stmt reindex-stmt release-stmt rollback-stmt savepoint-stmt select-stmt update-stmt update-stmt-limited vacuum-stmt
2. 설명
SQL 문은 "EXPLAIN" 키워드나 "EXPLAIN QUERY PLAN" 구문으로 시작할 수 있습니다. 두 경우 모두 해당 SQL 문이 쿼리처럼 동작하게 하며, EXPLAIN 키워드나 구문이 없었다면 어떻게 실행되었을지에 대한 정보를 반환합니다.
EXPLAIN 및 EXPLAIN QUERY PLAN의 출력은 대화형 분석과 문제 해결 전용입니다. 출력 형식의 세부 사항은 SQLite 릴리스에 따라 변경될 수 있습니다. 애플리케이션은 EXPLAIN이나 EXPLAIN QUERY PLAN을 사용하면 안 됩니다. 정확한 동작이 가변적이고 일부만 문서화되어 있기 때문입니다.
EXPLAIN 키워드만 단독으로 사용하면 해당 문은 가상 머신 명령어 시퀀스를 반환하는 쿼리처럼 동작합니다. 이 명령어 시퀀스는 EXPLAIN 키워드가 없었다면 그 명령을 실행하는 데 사용되었을 것입니다. EXPLAIN QUERY PLAN 구문을 사용하면 그때 사용되었을 쿼리 계획에 대한 상위 수준 정보를 반환합니다.
EXPLAIN QUERY PLAN 명령에 대한 자세한 내용은 여기에서 더 자세히 설명합니다.
2.1. EXPLAIN은 prepare 시점이 아니라 실행 시점에 동작합니다
EXPLAIN 및 EXPLAIN QUERY PLAN 접두사는 sqlite3_step()을 사용해 준비된 문(statement)을 실행할 때의 동작에 영향을 줍니다. sqlite3_prepare() 등을 사용해 새 준비된 문을 생성하는 과정은 (대부분) EXPLAIN의 영향을 받지 않습니다. (단, 성능 최적화를 위해 EXPLAIN QUERY PLAN 준비된 문을 만들 때 EXPLAIN QUERY PLAN에서 사용하는 일부 특수 opcode가 생략된다는 예외는 있습니다.)
즉, sqlite3_prepare() 동안 발생하는 작업은 EXPLAIN의 영향을 받지 않습니다.
-
일부
PRAGMA문은sqlite3_step()이 아니라sqlite3_prepare()중에 작업을 수행합니다. 이러한PRAGMA문은EXPLAIN의 영향을 받지 않습니다.EXPLAIN접두사가 있든 없든 동일하게 동작합니다.EXPLAIN의 영향을 받지 않는PRAGMA문의 집합은 릴리스마다 달라질 수 있습니다. 일부PRAGMA문은 인수에 따라sqlite3_prepare()중에 동작합니다. 일관된 결과를 얻으려면PRAGMA문에EXPLAIN을 사용하지 마세요. -
authorizer 콜백은
EXPLAIN또는EXPLAIN QUERY PLAN의 유무와 관계없이 호출됩니다.