例如,此查询:
SELECT
CLIENT, TITLE, SEASON,
COUNT('X') N_EPISODIOS
FROM
LIC_SERIES
GROUP BY
CLIENT, TITLE, SEASON;
他的表LIC_SERIES
是:
CREATE TABLE lic_series
(
client VARCHAR2(15),
datetime DATE,
title VARCHAR2(100) NOT NULL,
season NUMBER(3) NOT NULL,
episode NUMBER(3) NOT NULL,
CONSTRAINT PK_licsS
PRIMARY KEY (client, title, season, episode),
CONSTRAINT
FK_licsS1 FOREIGN KEY (title,season) REFERENCES seasons
);
我想知道是否有任何命令或某种方式来了解上一个查询是否通过主键或替代键访问该表,以及原因。
答案 0 :(得分:4)
如果有任何命令或某种方式知道以前的查询 通过主键或替代键访问表
是,对该查询使用EXPLAIN PLAN。生成的查询计划将能够显示索引是否已被使用以及哪一个和哪里。
EXPLAIN PLAN FOR
SELECT CLIENT,TITLE,SEASON, COUNT('X') N_EPISODIOS FROM LIC_SERIES
GROUP BY CLIENT,TITLE,SEASON;
使用如下SQL语句查看查询计划:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
答案 1 :(得分:2)
解释计划有时可能与实际执行计划不同。因此,如果您猜测查询未按预期执行,您可以从V $ SQL_PLAN_STATISTICS_ALL系统视图中检查实际计划,
select *
from v$sql_plan_statistics_all
where sql_id = 'your_query_sql_id'
可以从中获取实际执行查询的 SQL_ID
select * from v$session
找到您的会话并向第一个查询提供sql_id
。
解释计划与实际计划之间的差异经常发生在数据库使用一段时间后,Oracle可以收集表使用情况的统计信息。