记一次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:查询条件没有用到组合索引的第一列,而组合索引的第一列重复度较高时,可能用到。
这里用简单的测试案例,体会下索引使用这些执行计划的场景。
1. 准备测试环境
创建测试表和索引:
- 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);
- desc test_objects;
查看测试表上的索引信息:
- select index_name, column_name, column_position from user_ind_columns where table_name = 'TEST_OBJECTS';
分析表并清空测试环境的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. 实验论证
结果如下:
(1) INDEX RANGE SCAN
- set autotrace traceonly
- SELECT owner, object_name FROM test_objects WHERE owner = 'SYS' AND object_name = 'DBMS_OUTPUT';
(2) INDEX SKIP SCAN
- SELECT owner, object_name FROM test_objects WHERE object_name = 'DBMS_OUTPUT';
(3) INDEX FAST FULL SCAN
- SELECT owner, object_name FROM test_objects;
(4) INDEX FULL SCAN
- SELECT owner, object_name FROM test_objects order by 1, 2;
(5) INDEX FULL SCAN (MIN/MAX)
- SELECT max(object_id) FROM test_objects;
【编辑推荐】
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0
- 大家都在看
- 猜你喜欢
编辑推荐
- 24H热文
- 一周话题
- 本月获赞
- 分享一份精心总结的数据库范式图解,值得收藏不考虑可运维性的数据库选型都应该枪毙记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案MySQL添加字段和删除字段MySQL分库分表,写得太好了!查看MySQL数据库的命令Oracle to_date()函数的用法MySQL查看表结构的实际操作命令简介
- MySQL分库分表,写得太好了!这句简单的SQL,如何加索引?颠覆了我多年的认知记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案MySQL添加字段和删除字段拼多多面试:如何用Redis统计独立用户访问量?不考虑可运维性的数据库选型都应该枪毙10个Mongodb GUI工具,以图形方式管理数据库一文看懂SQL Server数据库触发器概念、原理及案例
- MySQL分库分表,写得太好了!记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案华为云数据库助力锦江都城释放数据价值,驱动业务变革MySQL性能优化之骨灰级高阶神技!10个Mongodb GUI工具,以图形方式管理数据库MySQL系列:一句SQL,MySQL是怎么工作的?37 个MySQL数据库小知识,为面试做准备终于有篇看的懂的B树文章了!
订阅专栏+更多
-
骨干网与数据中心建设案例
高级网工必会共20章 | 捷哥CCIE398人订阅学习
-
中间件安全防护攻略
4类安全防护共4章 | hack_man144人订阅学习
-
CentOS 8 全新学习术
CentOS 8 正式发布共16章 | UbuntuServer291人订阅学习
视频课程+更多
-
零基础学文件上传漏洞绕过及代码审计
讲师:Margin6365人学习过
-
VMware vSAN超融合基础架构设计
讲师:王琦2674人学习过
-
Excel企业实战与解决方案开发教程1
讲师:王子宁235770人学习过
- 精选博文
- 论坛热帖
读 书 +更多
征服Python—语言基础与典型应用
Python是目前流行的脚本语言之一。本书由浅入深、循序渐进地讲解如何使用Python进行程序开发。全书内容包括Python安装、开发工具简介、Pyth...
-
订阅51CTO邮刊
点击这里查看样刊

51CTO服务号

51CTO官微