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 中,“包括实际的执行计划”(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 中打开 →