Oracle PL/SQL/SQL Plus/explain plan
Содержание
Execution plan for the specified statement_id
SQL>
SQL> UNDEFINE v_statement_id;
SQL>
SQL> SELECT id ||
2 DECODE(id, 0, "", LPAD(" ", 2*(level - 1))) || " " ||
3 operation || " " ||
4 options || " " ||
5 object_name || " " ||
6 object_type || " " ||
7 DECODE(cost, NULL, "", "Cost = " || position)
8 AS execution_plan
9 FROM plan_table
10 CONNECT BY PRIOR id = parent_id
11 AND statement_id = "&&v_statement_id"
12 START WITH id = 0
13 AND statement_id = "&v_statement_id";
Enter value for v_statement_id:
old 11: AND statement_id = "&&v_statement_id"
new 11: AND statement_id = ""
old 13: AND statement_id = "&v_statement_id"
new 13: AND statement_id = ""
no rows selected
SQL>
explain plan for query
SQL>
SQL> create table emp(
2 emp_id integer primary key
3 ,lastname varchar2(20) not null
4 ,firstname varchar2(15) not null
5 ,midinit varchar2(1)
6 ,street varchar2(30)
7 ,city varchar2(20)
8 ,state varchar2(2)
9 ,zip varchar2(5)
10 ,shortZipCode varchar2(4)
11 ,area_code varchar2(3)
12 ,phone varchar2(8)
13 ,company_name varchar2(50));
Table created.
SQL>
SQL>
SQL> insert into emp(emp_id,lastname,firstname,midinit,street,city,state,zip,shortZipCode,area_code,phone,company_name)values
2 (1,"Jones","Joe","J","1 Ave","New York","NY","11202","1111","212", "221-4333","Big Company");
1 row created.
SQL> insert into emp(emp_id,lastname,firstname,midinit,street,city,state,zip,shortZipCode,area_code,phone,company_name)values
2 (2,"Smith","Sue","J","1 Street","New York","NY","11444","1111","212", "436-6773","Little Company");
1 row created.
SQL> insert into emp(emp_id,lastname,firstname,midinit,street,city,state,zip,shortZipCode,area_code,phone,company_name)values
2 (3,"X","Peggy","J","1 Drive","New York","NY","45502","2222","212", "234-4444","Medium Company");
1 row created.
SQL> explain plan for
2 select *
3 from emp
4 where lastname = "Young";
Explained.
SQL> select operation
2 from plan_table;
SELECT STATEMENT
TABLE ACCESS
SELECT STATEMENT
TABLE ACCESS
SELECT STATEMENT
TABLE ACCESS
6 rows selected.
SQL> explain plan for
2 select *
3 from emp
4 where firstname="Joe";
Explained.
SQL> select operation
2 from plan_table;
SELECT STATEMENT
TABLE ACCESS
SELECT STATEMENT
TABLE ACCESS
SELECT STATEMENT
TABLE ACCESS
SELECT STATEMENT
TABLE ACCESS
8 rows selected.
SQL>
SQL>
SQL> set autotrace off
SQL>
SQL> drop table emp;
Table dropped.
SQL>
SQL>
explain plan for select statement
SQL> create table t as select mod(object_id,10) id, a.* from all_objects a;
SQL>
SQL> analyze table t compute statistics
2 for table
3 for columns id;
SQL>
SQL>
SQL>
SQL> alter session set optimizer_max_permutations=80000;
SQL>
SQL> explain plan for
2 select count(*)
3 from t t1, t t2, t t3, t t4, t t5, t t6
4 where t1.id = t2.id
5 and t1.id = t3.id
6 and t1.id = t4.id
7 and t1.id = t5.id
8 and t1.id = t6.id;
SQL>
SQL> set autotrace off
SQL>
SQL>
SQL> drop table t;
Explain sql statement
SQL>
SQL> create table emp (
2 EmpNo NUMBER(10) primary key,
3 Name VARCHAR2(40),
4 DeptNo NUMBER(2),
5 Salary NUMBER(7,2),
6 Birth_Date DATE,
7 Soc_Sec_Num VARCHAR2(9),
8 State_Code CHAR(2)
9 );
SQL>
SQL> explain plan
2 set Statement_Id = "TEST"
3 for
4 select * from emp;
SQL>
SQL> select LPAD(" ",2*Level)||Operation||" "||Options||" "||Object_Name Q_Plan
2 from PLAN_TABLE
3 where Statement_Id = "TEST"
4 connect by prior ID = Parent_ID and Statement_ID = "TEST"
5 start with ID=0;
Q_PLAN
------------------------------------------------------------------------------------------------------------------------
SELECT STATEMENT
TABLE ACCESS FULL EMP
TABLE ACCESS FULL EMP
SELECT STATEMENT
TABLE ACCESS FULL EMP
TABLE ACCESS FULL EMP
SQL>
SQL> set autotrace off explain
SQL>
SQL>
SQL> drop table emp;