|
|
51CTO旗下网站
|
|
移动端

记一次Oracle数据库实验--索引的常见执行计划

今天主要介绍下Oracle索引的常见执行计划,这里用简单的测试案例,体会下索引使用这些执行计划的场景。

作者:波波说运维来源:今日头条|2019-11-28 08:31

概述

今天主要介绍下Oracle索引的常见执行计划:

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

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

Oracle

1. 准备测试环境

创建测试表和索引:

  1. drop table test_objects; 
  2. create table test_objects as select * from all_objects; 
  3. create index idx_test_objects_1 on test_objects(owner, object_name, subobject_name); 
  4. create index idx_test_objects_2 on test_objects(object_id); 
  5. desc test_objects; 

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

  1. select index_name, column_name, column_position from user_ind_columns where table_name = 'TEST_OBJECTS'

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

  1. analyze table test_objects compute statistics; 
  2. alter system flush shared_pool; 
  3. alter system flush buffer_cache; 

记一次Oracle数据库实验--索引的常见执行计划

记一次Oracle数据库实验--索引的常见执行计划

2. 准备SQL语句

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

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

3. 实验论证

结果如下:

(1) INDEX RANGE SCAN

  1. set autotrace traceonly 
  2. SELECT owner, object_name FROM test_objects WHERE owner = 'SYS' AND object_name = 'DBMS_OUTPUT'

记一次Oracle数据库实验--索引的常见执行计划

(2) INDEX SKIP SCAN

  1. SELECT owner, object_name FROM test_objects WHERE object_name = 'DBMS_OUTPUT'

记一次Oracle数据库实验--索引的常见执行计划

(3) INDEX FAST FULL SCAN

  1. SELECT owner, object_name FROM test_objects; 

记一次Oracle数据库实验--索引的常见执行计划

(4) INDEX FULL SCAN

  1. SELECT owner, object_name FROM test_objects order by 1, 2;  

记一次Oracle数据库实验--索引的常见执行计划

(5) INDEX FULL SCAN (MIN/MAX)

  1. SELECT max(object_id) FROM test_objects;  

记一次Oracle数据库实验--索引的常见执行计划

【编辑推荐】

  1. 分享一份Oracle数据库标准的SYSAUX表空间清理方案
  2. 5个优秀的开源图数据库
  3. 数据库连接池技术的原理
  4. 详解SQL Server数据库sql优化注意事项25条
  5. 值得关注的五大SQL数据库恢复软件
【责任编辑:赵宁宁 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

骨干网与数据中心建设案例

骨干网与数据中心建设案例

高级网工必会
共20章 | 捷哥CCIE

398人订阅学习

中间件安全防护攻略

中间件安全防护攻略

4类安全防护
共4章 | hack_man

144人订阅学习

CentOS 8 全新学习术

CentOS 8 全新学习术

CentOS 8 正式发布
共16章 | UbuntuServer

291人订阅学习

读 书 +更多

征服Python—语言基础与典型应用

Python是目前流行的脚本语言之一。本书由浅入深、循序渐进地讲解如何使用Python进行程序开发。全书内容包括Python安装、开发工具简介、Pyth...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微