【发布时间】:2011-05-23 06:56:24
【问题描述】:
数据库通常在执行查询之前对其进行优化。对于使用 JDBC 或命令行客户端发出的查询,可以查看数据库执行的实际优化查询。我正在使用 Oracle 数据库。
【问题讨论】:
标签: sql database oracle optimization jdbc
数据库通常在执行查询之前对其进行优化。对于使用 JDBC 或命令行客户端发出的查询,可以查看数据库执行的实际优化查询。我正在使用 Oracle 数据库。
【问题讨论】:
标签: sql database oracle optimization jdbc
我认为您误解了 - EXPLAIN PLAN 向您展示了优化器看到的内容的摘要,而不是事实上的查询:
Rows Execution Plan
-------- ----------------------------------------------------
12 SORT AGGREGATE
2 SORT GROUP BY
76563 NESTED LOOPS
76575 NESTED LOOPS
19 TABLE ACCESS FULL CN_PAYRUNS_ALL
76570 TABLE ACCESS BY INDEX ROWID CN_POSTING_DETAILS_ALL
76570 INDEX RANGE SCAN (object id 178321)
76563 TABLE ACCESS BY INDEX ROWID CN_PAYMENT_WORKSHEETS_ALL
11432983 INDEX RANGE SCAN (object id 186024)
优化器所做的决定是基于所涉及的表和任何索引的统计信息。如果事情发生了足够的变化,刷新统计数据可能会发生巨大变化。
【讨论】:
WHERE TRUE 或 WHERE a = 1 AND TRUE 等)。但实际上,我也认为 OP 只是误解了EXPLAIN。
INNER JOIN 子句也可以更改结果集。这不是 DBMS 业务 - 为您考虑:如果您不需要加入,只需自行删除。