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 키워드나 구문이 없었다면 어떻게 실행되었을지에 대한 정보를 반환합니다.

EXPLAINEXPLAIN QUERY PLAN의 출력은 대화형 분석과 문제 해결 전용입니다. 출력 형식의 세부 사항은 SQLite 릴리스에 따라 변경될 수 있습니다. 애플리케이션은 EXPLAIN이나 EXPLAIN QUERY PLAN을 사용하면 안 됩니다. 정확한 동작이 가변적이고 일부만 문서화되어 있기 때문입니다.

EXPLAIN 키워드만 단독으로 사용하면 해당 문은 가상 머신 명령어 시퀀스를 반환하는 쿼리처럼 동작합니다. 이 명령어 시퀀스는 EXPLAIN 키워드가 없었다면 그 명령을 실행하는 데 사용되었을 것입니다. EXPLAIN QUERY PLAN 구문을 사용하면 그때 사용되었을 쿼리 계획에 대한 상위 수준 정보를 반환합니다.

EXPLAIN QUERY PLAN 명령에 대한 자세한 내용은 여기에서 더 자세히 설명합니다.

2.1. EXPLAIN은 prepare 시점이 아니라 실행 시점에 동작합니다

EXPLAINEXPLAIN 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의 유무와 관계없이 호출됩니다.

더 알아보기 (Learn more)