DBAtlas · 데이터베이스 운영 아틀라스

쿼리 실행 계획 확인(EXPLAIN)

Oracle

EXPLAIN PLAN FOR
SELECT * FROM customer WHERE city = 'Ankara';
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
-- For the actual executed plan:
-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', NULL, 'ALLSTATS LAST'));

EXPLAIN PLAN은 예상 실행 계획을 보여 준다. 실제 행 수는 DISPLAY_CURSOR + STATISTICS_LEVEL=ALL을 사용한다.

PostgreSQL

EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT * FROM customer WHERE city = 'Ankara';

ANALYZE는 쿼리를 실제로 실행한다(INSERT/UPDATE/DELETE는 주의. 트랜잭션 안에서 시도한 뒤 ROLLBACK한다).

MySQL

EXPLAIN ANALYZE
SELECT * FROM customer WHERE city = 'Ankara';
-- Estimate only (does not execute): EXPLAIN FORMAT=JSON SELECT ...;

EXPLAIN ANALYZE(MySQL 8.0.18+)는 쿼리를 실행한다. FORMAT=JSON은 실행하지 않고 상세 정보를 보여 준다.

SQL Server

SET STATISTICS PROFILE ON;
SELECT * FROM dbo.customer WHERE city = 'Ankara';
SET STATISTICS PROFILE OFF;
-- Estimated plan only (does not execute):
-- SET SHOWPLAN_XML ON;

SSMS에서 'Include Actual Execution Plan'(Ctrl+M)은 그래픽 실행 계획을 보여 준다.

MongoDB

db.customer.find({ city: "Ankara" }).explain("executionStats")

executionStats는 실제 반환된 문서 수와 인덱스 사용 여부(IXSCAN vs COLLSCAN)를 보여 준다.

Redis

# Not applicable: Redis has no query planner.
# The complexity of each command is documented (e.g. GET O(1), SORT O(N+M*log(M))).

성능은 명령 복잡도와 키/데이터 구조 크기에 따라 결정된다. SLOWLOG로 측정한다.

DBAtlas에서 열기 →