在《SQL Tuning 基础概述05 - Oracle 索引类型及介绍》的1.5小节,提到了几种"索引的常见执行计划":

INDEX FULL SCAN:索引的全扫描,单块读,有序
INDEX RANGE SCAN:索引的范围扫描
INDEX FAST FULL SCAN:索引的快速全扫描,多块读,无序
INDEX FULL SCAN(MIN/MAX):针对MAX(),MIN()函数的查询
INDEX SKIP SCAN:查询条件没有用到组合索引的第一列,而组合索引的第一列重复度较高时,可能用到

本文用简单的测试案例,体会下索引使用这些执行计划的场景:

  • 1.准备测试环境
  • 2.编写SQL语句
  • 3.实验环境验证

1.准备测试环境

创建测试表和索引:

conn jingyu/jingyu
drop table test_objects;
create table test_objects as select * from all_objects;
create index idx_test_objects_1 on test_objects(owner, object_name, subobject_name);
create index idx_test_objects_2 on test_objects(object_id);

查看测试表结构:

SQL> desc test_objects;Name                                                              Null?    Type----------------------------------------------------------------- -------- --------------------------------------------OWNER                                                             NOT NULL VARCHAR2(30)OBJECT_NAME                                                       NOT NULL VARCHAR2(30)SUBOBJECT_NAME                                                             VARCHAR2(30)OBJECT_ID                                                         NOT NULL NUMBERDATA_OBJECT_ID                                                             NUMBEROBJECT_TYPE                                                                VARCHAR2(19)CREATED                                                           NOT NULL DATELAST_DDL_TIME                                                     NOT NULL DATETIMESTAMP                                                                  VARCHAR2(19)STATUS                                                                     VARCHAR2(7)TEMPORARY                                                                  VARCHAR2(1)GENERATED                                                                  VARCHAR2(1)SECONDARY                                                                  VARCHAR2(1)NAMESPACE                                                         NOT NULL NUMBEREDITION_NAME                                                               VARCHAR2(30)

查看测试表上的索引信息:

SQL> select index_name, column_name, column_position from user_ind_columns where table_name = 'TEST_OBJECTS';INDEX_NAME                     COLUMN_NAME                              COLUMN_POSITION
------------------------------ ---------------------------------------- ---------------
IDX_TEST_OBJECTS_1             OWNER                                                  1
IDX_TEST_OBJECTS_1             OBJECT_NAME                                            2
IDX_TEST_OBJECTS_1             SUBOBJECT_NAME                                         3
IDX_TEST_OBJECTS_2             OBJECT_ID                                              1

分析表并清空测试环境的shared_pool和buffer_cache:

analyze table test_objects compute statistics;
alter system flush shared_pool;
alter system flush buffer_cache;

2.编写SQL语句

根据不同执行计划的场景,编写SQL语句:

--INDEX RANGE SCAN(索引的范围扫描)
SELECT owner, object_name FROM test_objects WHERE owner = 'SYS' AND object_name = 'DBMS_OUTPUT';--INDEX SKIP SCAN(针对MAX(),MIN()函数的查询)
SELECT owner, object_name FROM test_objects WHERE object_name = 'DBMS_OUTPUT';--INDEX FAST FULL SCAN(索引的快速全扫描,多块读,无序)
SELECT owner, object_name FROM test_objects;--INDEX FULL SCAN(索引的全扫描,单块读,有序)
SELECT owner, object_name FROM test_objects order by 1, 2;--INDEX FULL SCAN (MIN/MAX)(针对MAX(),MIN()函数的查询)
SELECT max(object_id) FROM test_objects;

3.实验环境验证

根据2中的SQL分别在实验环境中验证,没有问题,结果如下:

SQL> set autot trace
--1. INDEX RANGE SCAN
SQL> SELECT owner, object_name FROM test_objects WHERE owner = 'SYS' AND object_name = 'DBMS_OUTPUT';Execution Plan
----------------------------------------------------------
Plan hash value: 3492129186---------------------------------------------------------------------------------------
| Id  | Operation        | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                    |     1 |    29 |     3   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_TEST_OBJECTS_1 |     1 |    29 |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------1 - access("OWNER"='SYS' AND "OBJECT_NAME"='DBMS_OUTPUT')Statistics
----------------------------------------------------------59  recursive calls0  db block gets104  consistent gets17  physical reads0  redo size676  bytes sent via SQL*Net to client519  bytes received via SQL*Net from client2  SQL*Net roundtrips to/from client6  sorts (memory)0  sorts (disk)2  rows processed--2. INDEX SKIP SCAN
SQL> SELECT owner, object_name FROM test_objects WHERE object_name = 'DBMS_OUTPUT';Execution Plan
----------------------------------------------------------
Plan hash value: 1228438998---------------------------------------------------------------------------------------
| Id  | Operation        | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                    |     2 |    58 |    27   (0)| 00:00:01 |
|*  1 |  INDEX SKIP SCAN | IDX_TEST_OBJECTS_1 |     2 |    58 |    27   (0)| 00:00:01 |
---------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------1 - access("OBJECT_NAME"='DBMS_OUTPUT')filter("OBJECT_NAME"='DBMS_OUTPUT')Statistics
----------------------------------------------------------2  recursive calls0  db block gets32  consistent gets23  physical reads0  redo size684  bytes sent via SQL*Net to client519  bytes received via SQL*Net from client2  SQL*Net roundtrips to/from client0  sorts (memory)0  sorts (disk)3  rows processed--3. INDEX FAST FULL SCAN
SQL> SELECT owner, object_name FROM test_objects;84311 rows selected.Execution Plan
----------------------------------------------------------
Plan hash value: 2324984732-------------------------------------------------------------------------------------------
| Id  | Operation            | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                    | 84311 |  387K|   138   (0)| 00:00:02 |
|   1 |  INDEX FAST FULL SCAN| IDX_TEST_OBJECTS_1 | 84311 |  387K|   138   (0)| 00:00:02 |
-------------------------------------------------------------------------------------------Statistics
----------------------------------------------------------1  recursive calls0  db block gets6097  consistent gets480  physical reads0  redo size3509341  bytes sent via SQL*Net to client62339  bytes received via SQL*Net from client5622  SQL*Net roundtrips to/from client0  sorts (memory)0  sorts (disk)84311  rows processed--4. INDEX FULL SCAN
SQL> SELECT owner, object_name FROM test_objects order by 1, 2;84311 rows selected.Execution Plan
----------------------------------------------------------
Plan hash value: 2751381935---------------------------------------------------------------------------------------
| Id  | Operation        | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                    | 84311 |  387K|   505   (1)| 00:00:07 |
|   1 |  INDEX FULL SCAN | IDX_TEST_OBJECTS_1 | 84311 |  387K|   505   (1)| 00:00:07 |
---------------------------------------------------------------------------------------Statistics
----------------------------------------------------------1  recursive calls0  db block gets6090  consistent gets0  physical reads0  redo size3509341  bytes sent via SQL*Net to client62339  bytes received via SQL*Net from client5622  SQL*Net roundtrips to/from client0  sorts (memory)0  sorts (disk)84311  rows processed--5. INDEX FULL SCAN (MIN/MAX)
SQL> SELECT max(object_id) FROM test_objects;Execution Plan
----------------------------------------------------------
Plan hash value: 729623451-------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |                    |     1 |     4 |     2   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE            |                    |     1 |     4 |            |          |
|   2 |   INDEX FULL SCAN (MIN/MAX)| IDX_TEST_OBJECTS_2 |     1 |     4 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------Statistics
----------------------------------------------------------2  recursive calls0  db block gets5  consistent gets2  physical reads0  redo size534  bytes sent via SQL*Net to client519  bytes received via SQL*Net from client2  SQL*Net roundtrips to/from client0  sorts (memory)0  sorts (disk)1  rows processed

转载于:https://www.cnblogs.com/wangsicongde/p/7577108.html

SQL Tuning 基础概述10相关推荐

  1. SQL Tuning 基础概述05 - Oracle 索引类型及介绍

    一.B-Tree索引 三大特点:高度较低.存储列值.结构有序 1.1利用索引特性进行优化 外键上建立索引:不但可以提升查询效率,而且可以有效避免锁的竞争(外键所在表delete记录未提交,主键所在表会 ...

  2. SQL Tuning 基础概述01 - Autotrace的设定

    1.autotrace的设定 SQL> set autotrace Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [ST ...

  3. SQL注入 基础概述及相关知识

    SQL注入 基础概述及相关知识 SQL注入概述 SQL注入攻击简介 SQL注入攻击原理 SQL注入攻击来源 SQL注入攻击主要特点 SQL注入攻击危害 SQL注入攻击 SQL注入攻击基础概述 SQL注 ...

  4. 【SQL数据库基础01】数据库和SQL概述

    文章目录 01 引入 1.1 数据库存储数据的特点 1.2 三个重要概念 1.2.1 DBMS 1.3 SQL的优点: 图例说明: 1.4 SQL语言四大类 1.4.1 数据查询语言DQL 1.4.1 ...

  5. 10、oracle下PL/SQL编程基础

    ORACLE下的PL/SQL编程基础 PL/SQL语言是程序化程序设计语言,块是PL/SQL编程中的基本结构,其优点在于支持SQL.支持面向对象编程.性能好.可移植性.与sql集成.安全性高等. 1. ...

  6. SQL注入基础原理与案例(详细总结)

    SQL注入基础原理与案例 一.前言 二.漏洞概述及危害 1.漏洞概述 2.漏洞危害 3.漏洞防范 三.SQL注入 1.SQL注入方式 (1)信息收集 (2)数据注入 (3)高权限注入 2.判断是否存在 ...

  7. sql trace基础

    一. 基础.SQL_TRACE 1. 在全局启用 在参数文件(pfile/spfile)中指定: sql_trace =true 在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及 ...

  8. 最全MySQL8.0实战教程 2 SQL语言基础

    最全MySQL8.0实战教程 文章目录 最全MySQL8.0实战教程 2 SQL语言基础 2.1 SQL的概述 2.2 SQL的特点 2.3 SQL语言的组成 2.4 语法特点 [黑马程序员MySQL ...

  9. MSSQL之一 数据库系统简介 与SQL Server 2008概述

    前   言 SQL的全称是结构化查询语言(Structured Query Language),它是关系数据库中最常用的语言.SQL不仅可以管理数据库中的数据,而且可以管理关系数据库本身.为了避免各数 ...

最新文章

  1. OpenStack高可用核心架构分析
  2. MySql中常用的内置函数
  3. Limesurvey-2.55 (Ubuntu 16.04)
  4. python输入一个列表的语句_python自学笔记使用if语句处理列表作业
  5. 第一章 概率论的基本概念
  6. 农村70后、80后、90后的儿时玩具有哪些?
  7. 计算机科学常见工具书清单、项目开发清单
  8. 记录一次etcd报错: listen tcp xxx.xxx.xxx.xxx:2380:bind: cannot assign requested address
  9. 2D纹理与3D模型共存时的渲染问题
  10. bt磁力种子与php文件,使用Python实现BT种子和磁力链接的相互转换
  11. office visio 替代_10个Linux中受欢迎的开源Visio替代品
  12. 游戏开发中的那点英语
  13. 如何写好工作日报,周报,月报?
  14. Nature:Jeff Dangl团队揭示贪噬菌属在微生物组中维持根的生长
  15. 进程间通信(无名管道)
  16. 4、Mac下的谷歌浏览器输入不安全网址点高级后没有继续前往链接解决办法
  17. Python 真的好学吗?
  18. Unity流水账9:Timeline
  19. 如何用AI做一个好看的图案
  20. linux基本安全防护

热门文章

  1. python白名单验证-JWT黑名单和白名单
  2. python语法syntaxerror怎么修改-Python 语法错误
  3. opencv+python读写视频流
  4. 一个简单的Webservice的demo(中)_前端页面调用
  5. 16款优秀的Vue UI组件库推荐
  6. SDUT 2127 树-堆结构练习——合并果子之哈夫曼树(优先队列)
  7. webpack插件机制
  8. MySQL常见错误总结
  9. HDU 1412 {A} + {B}
  10. winform C#的委托事件在winform窗体中传值,也可用于刷新另一窗体(窗体A刷新窗体B)...