【测试】模拟一个全表扫描的sql,对其进行优化走索引,并且将执行计划稳定到baseLine。
①创建表t3:
SQL> create table t3 (id int); Table created. SQL> insert into t3 select level from dual connect by level<=100000; 100000 rows created.
②开启自动捕获并修改时间格式:
SQL> alter system set optimizer_capture_sql_plan_baselines=true; System altered. SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered.
③查询sql
SQL> select count(*) from t1 where id=1; COUNT(*)
----------
2 SQL> select count(*) from t1 where id=1; COUNT(*)
----------
2 SQL> select sql_handle,sql_text,plan_name,origin,version,created,last_modified,last_executed,last_verified,enabled,accepted,fixed from dba_sql_plan_baselines where sql_text like '%select count(*) from t1 where id=1%'; SQL_HANDLE
------------------------------
SQL_TEXT
------------------------------------------------------------------------------
PLAN_NAME ORIGIN
------------------------------ --------------
VERSION
----------------------------------------------------------------
CREATED
---------------------------------------------------------------------------
LAST_MODIFIED
---------------------------------------------------------------------------
LAST_EXECUTED
---------------------------------------------------------------------------
LAST_VERIFIED
---------------------------------------------------------------------------
ENA ACC FIX
--- --- ---
SQL_c0dca3d9bf76dcbd
select count(*) from t1 where id=1
SQL_PLAN_c1r53v6zrdr5x616acf47 AUTO-CAPTURE
11.2.0.4.0
17-OCT-16 02.56.20.000000 PM
17-OCT-16 02.56.20.000000 PM
17-OCT-16 02.56.20.000000 PM YES YES NO
④创建索引:
SQL> create index idx_t1 on t1(id); Index created.
⑤再次执行相同的sql语句:
SQL> select count(*) from t1 where id=1; COUNT(*)
----------
2 SQL> select sql_handle,sql_text,plan_name,origin,version,created,last_modified,last_executed,last_verified,enabled,accepted,fixed from dba_sql_plan_baselines where sql_text like '%select count(*) from t1 where id=1%'; SQL_HANDLE
------------------------------
SQL_TEXT
------------------------------------------------------------------------------
PLAN_NAME ORIGIN
------------------------------ --------------
VERSION
----------------------------------------------------------------
CREATED
---------------------------------------------------------------------------
LAST_MODIFIED
---------------------------------------------------------------------------
LAST_EXECUTED
---------------------------------------------------------------------------
LAST_VERIFIED
---------------------------------------------------------------------------
ENA ACC FIX
--- --- ---
SQL_c0dca3d9bf76dcbd
select count(*) from t1 where id=1
SQL_PLAN_c1r53v6zrdr5x616acf47 AUTO-CAPTURE
11.2.0.4.0
17-OCT-16 02.56.20.000000 PM
17-OCT-16 02.56.20.000000 PM
17-OCT-16 02.56.20.000000 PM YES YES NO
SQL_c0dca3d9bf76dcbd
select count(*) from t1 where id=1
SQL_PLAN_c1r53v6zrdr5xa9a6a0a8 AUTO-CAPTURE
11.2.0.4.0
17-OCT-16 02.59.07.000000 PM
17-OCT-16 02.59.07.000000 PM YES NO NO
⑥演进执行计划:
SQL> SET SERVEROUTPUT ON
SQL> SET LONG 10000
SQL> declare
2 report clob;
3 begin
4 report :=DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(
5 sql_handle => 'SQL_c0dca3d9bf76dcbd');
6 DBMS_OUTPUT.PUT_LINE(report);
7 END;
8 / -----------------------------------------------------------------------------
--
Evolve SQL Plan Baseline
Report
-----------------------------------------------------------------------
-------- Inputs:
-------
SQL_HANDLE = SQL_c0dca3d9bf76dcbd
PLAN_NAME = TIME_LIMIT = DBMS_SPM.AUTO_LIMIT
VERIFY = YES
COMMIT = YES Plan:
SQL_PLAN_c1r53v6zrdr5xa9a6a0a8
------------------------------------
Plan was
verified: Time used .09 seconds.
Plan passed performance criterion: 153.86
times better than baseline plan.
Plan was changed to an accepted plan. Baseline Plan Test Plan Stats Ratio ------------- --------- -----------
Execution Status:
COMPLETE COMPLETE
Rows Processed: 1
1
Elapsed Time(ms): 4.149 .046 90.2 CPU Time(ms): 4.221 .111 38.03 Buffer Gets: 309 2 154.5 Physical Read Requests: 0 0
Physical Write
Requests: 0 0
Physical Read Bytes:
0 0
Physical Write Bytes: 0 0 Executions: 1
1 ---------------------------------------------------------------------------
----
Report
Summary
----------------------------------------------------------------------
---------
Number of plans verified: 1
Number of plans accepted: 1 PL/SQL procedure successfully completed.
⑦再次查看:
SQL> select sql_handle,sql_text,plan_name,origin,version,created,last_modified,last_executed,last_verified,enabled,accepted,fixed from dba_sql_plan_baselines where sql_text like '%select count(*) from t1 where id=1'; SQL_HANDLE
------------------------------
SQL_TEXT
------------------------------------------------------------------------------
PLAN_NAME ORIGIN
------------------------------ --------------
VERSION
----------------------------------------------------------------
CREATED
---------------------------------------------------------------------------
LAST_MODIFIED
---------------------------------------------------------------------------
LAST_EXECUTED
---------------------------------------------------------------------------
LAST_VERIFIED
---------------------------------------------------------------------------
ENA ACC FIX
--- --- ---
SQL_c0dca3d9bf76dcbd
select count(*) from t1 where id=1
SQL_PLAN_c1r53v6zrdr5x616acf47 AUTO-CAPTURE
11.2.0.4.0
17-OCT-16 02.56.20.000000 PM
17-OCT-16 02.56.20.000000 PM
17-OCT-16 02.56.20.000000 PM YES YES NO
SQL_c0dca3d9bf76dcbd
select count(*) from t1 where id=1
SQL_PLAN_c1r53v6zrdr5xa9a6a0a8 AUTO-CAPTURE
11.2.0.4.0
17-OCT-16 02.59.07.000000 PM
17-OCT-16 03.02.17.000000 PM 17-OCT-16 03.02.17.000000 PM
YES YES NO
⑧查看现在查询所用的执行计划:
SQL> select count(*) from t1 where id=1; Execution Plan
----------------------------------------------------------
Plan hash value: 1970818898 ----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 13 | | |
|* 2 | INDEX RANGE SCAN| IDX_T1 | 2 | 26 | 1 (0)| 00:00:01 |
---------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 2 - access("ID"=1) Note
-----
- dynamic sampling used for this statement (level=2)
- SQL plan baseline "SQL_PLAN_c1r53v6zrdr5xa9a6a0a8" used for this statemen
t Statistics
----------------------------------------------------------
29 recursive calls
15 db block gets
94 consistent gets
0 physical reads
3000 redo size
526 bytes sent via SQL*Net to client
524 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
【测试】模拟一个全表扫描的sql,对其进行优化走索引,并且将执行计划稳定到baseLine。的更多相关文章
- 【转】避免全表扫描的sql优化
对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引: .尝试下面的技巧以避免优化器错选了表扫描:· 使用ANALYZE TABLE tbl_name为扫 ...
- 避免全表扫描的sql优化
对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引: .尝试下面的技巧以避免优化器错选了表扫描: · 使用ANALYZE TABLE tbl_na ...
- Mysql怎么样避免全表扫描,sql查询优化
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引: 尝试下面的技巧以避免优化器错选了表扫描: 使用ANALYZE TABLE tbl_name为扫 ...
- 数据库全表扫描的SQL种类
1.所查询的表的条件列没有索引: 2.需要返回所有的行: 3.对索引主列有条件限制,但是使用了函数,则Oracle 使用全表扫描,如: where upper(city)=’TOKYO’; 这样的语 ...
- SQL Tuning 基础概述10 - 体会索引的常见执行计划
在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...
- Oracle查找全表扫描的SQL语句
原文链接:http://blog.itpub.net/9399028/viewspace-678358/ 对于SQL的执行计划,一般尽量避免TABLE ACCESS FULL的出现,那怎样去定位,系统 ...
- SQL中哪些情况会引起全表扫描
1.模糊查询效率很低:原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like '%...%'(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低:另外,由于匹配算法的关 ...
- [转载]会引起全表扫描的几种SQL
查询语句的时候尽量避免全表扫描,使用全扫描,索引扫描!会引起全表扫描的几种SQL如下 1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like ‘%... ...
- [SQL]会引起全表扫描的10种SQL语句
1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like ‘%...%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低:另外,由于匹配算法的 ...
随机推荐
- Centos7和win7双系统调整默认启动
centos7之后都上grub2了,所以你要更改默认启动项什么的就不能像以前一样去改 /etc/grub.conf 当然你更不能去改/etc/grub2.conf 上了grub2之后,在设计有意规避让 ...
- CentOS7安装Oracle 11g R2 详细过程——零基础
本人linux小白,因项目原因必须要在linux下使用oracle便开始了探索.安装过程中遇到了种种问题与原因,今天整理一下方便后面的可以少走弯路. *注明: 安装过程注意当前错作的用户,执行./ru ...
- 删除指定的文件.bat
@echo offattrib -s -h -r /s /d C:\*Thumbs.dbattrib -s -h -r /s /d D:\*Thumbs.dbattrib -s -h -r /s /d ...
- PHP中的中文截取乱码问题_gb2312_utf-8
一.字符串编码为gb2312,一个中文占俩字节 public static function chinesesubstr($str, $start, $len) { // $str指字符串,$star ...
- C#属性访问器
属性的访问器包含与获取或设置属性有关的可执行语句.访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含.声明采用下列形式之一:get {}set {} get 访问器get 访问器体与 ...
- 准备学一学go-lang啦 ~~ 学习Go应该用什么姿势? !
go毕竟是新语言,没有那么多历史包袱,并且是google出品,c语言创始人为语言设计组成员,应该还是不错的. go天生具有并行能力,这个在现代服务器端编程领域作用很显而易见,高效服务,快速编码,适合互 ...
- windows下boost库的基本使用方法
因为boost都是使用模板的技术,所以所有代码都是写在一个.hpp头文件中.这样boost中的大部分内容是不需要编译生成相应的链接库,只需要设置下面的包含目录(或者设置一下环境变量),在源文件中包含相 ...
- centos7扩展磁盘空间
[root@hn ~]# fdisk /dev/sdb The device presents a logical sector size that is smaller thanthe physic ...
- RVMDK的DEBUG调试-实时数据查看
无论在Simulation还是硬件仿真的情况下,View-period windows update后watch窗口添加的变量即可实时更新, 软仿真和硬件仿真的区别就是实际时间的差异:如RTC查看秒的 ...
- JMeter使用技巧
在这此对新版本jmeter的学习+温习的过程,发现了一些以前不知道的功能,所以,整理出来与大分享.本文内容如下. 如何使用英文界面的jmeter 如何使用镜像服务器 Jmeter分布式测试 启动Deb ...