创建索引 显示执行计划
1.创建索引
可以放在任意的表空间
create index index_name on table_name(xxx,xxx) tablespace tablespace_name storage(xxxx .....)
1)em下的命令
CREATE INDEX "SCOTT"."INX_EMP" ON "SCOTT"."EMP" ("EMPNO", "JOB", "DEPTNO") TABLESPACE "MYTABLESPACE";
2)sqlplus命令
SQL> create index ind_emp on emp(sal,ename);
Index created.
scott用户创建索引不显示?
SQL>
2. 执行创建role plustrace的脚本
1)执行脚本
SQL> conn sys as sysdba
Enter password:
Connected.
Enter password:
Connected.
SQL> @e:\oracle\product\ 10.1.0 \Db_1\sqlplus\admin\plustrce.sql --执行创建role plustrace的脚本
//安装的oracle路径在e盘
---脚本dba自动创建的权限
SQL>
SQL> drop role plustrace;
Role dropped.
SQL> create role plustrace;
Role created.
SQL>
SQL> grant select on v_$sesstat to plustrace;
Grant succeeded.
SQL> grant select on v_$statname to plustrace;
Grant succeeded.
SQL> grant select on v_$mystat to plustrace;
Grant succeeded.
SQL> grant plustrace to dba with admin option;
Grant succeeded.
SQL>
SQL> set echo off
---脚本dba自动创建的权限
2)给public执行计划的权限
DBA用户首先被授予了plustrace角色,然后我们可以把plustrace授予public
这样所有用户都将拥有plustrace角色的权限.
SQL>grant plustrace to public;
//如果你需要限制Autotrace权限,可以把对public的授权改为对特定user的授权。
然后我们就可以使用AutoTrace的功能了.
-- -----------
--赋角色plustrace给public,所有普通用户都具有此角色
/*一般情况下不用配置上面的内容*/ 这个角色会让普通用户可以查看到统计信息等。
---------------
--普通用户没有该角色时在
SQL> set time on
10:09:20 SQL> set autotrace on
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
提示么有角色权限,所在只能看到Execution Plan的信息,看不到统计信息。
----------------
3.执行创建plan_table的脚本
SQL> @e:\oracle\product\ 10.1.0 \Db_1\RDBMS\ADMIN\utlxplan.sql; --
SQL>grant all on plan_table to public; -- 赋plan_table上的all权限给public,所有普通用户都具有此权限
Grant succeeded.
Table created.
SQL>
4.Sql*plus运行错误的原因
可能你第一次在SQL*PLUS中运行 SET AUTOTRACE ON会得到如下错误:
SQL> set autotrace on;
SP2-0613: 无法验证 PLAN_TABLE 格式或实体
SP2-0611: 启用EXPLAIN 报告时出错
SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色
SP2-0611: 启用STATISTICS报告时出错
这是因为你没有PLUSTRACE 权限
1).运行plustrce.sql,必须用SYS用户或者再SVRMGRL中
SQL> @e:\oracle\product\ 10.1.0 \Db_1\sqlplus\admin\plustrce.sql
2).Grant PLUSTRACE to SMS
3).在SMS的模式下运行
@e:\oracle\product\ 10.1.0 \Db_1\RDBMS\ADMIN\utlxplan.sql;
然后就可以用set autotrace on了
5.普通用户执行计划
SQL>connect scott //普通用户
SQL>set autotrace on --显示执行计划和统计信息
SQL>set autotrace on explain --只显示执行计划
SQL>set autotrace on statistics --只显示统计信息
SQL>set autotrace traceonly --同autotrace on,但不显示查询结果
SQL>set autotrace off --关闭autotrace
Eg.
18:18:02 SQL> set autotrace on traceonly;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=14 Bytes=51
8)
1 0 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14 Bytes
=518)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
8 consistent gets
0 physical reads
0 redo size
1402 bytes sent via SQL*Net to client
512 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
15 rows processed
18:45:47 SQL>