首页 数据库 mysql教程 通过案例学调优之--Index FULL SCAN和Index FAST FULL SCAN

通过案例学调优之--Index FULL SCAN和Index FAST FULL SCAN

Jun 07, 2016 pm 04:46 PM
scan 案例 通过

通过案例学调优之--IndexFULLSCAN和IndexFASTFULLSCANIndexFULLSCAN和ndexFASTFULLSCAN工作原理:IndexFULLSCAN和IndexFASTFULLSCAN的适用情况:适用于我们想选


    INDEX FAST FULL SCAN:
HINT写法:INDEX_FFS(表名 索引名)
原理:从段头开始,读取包含位图块,ROOT BLOCK,所有的BRANCH BLOCK,LEAF BLOCK,读取的顺序完全有物理存储位置决定,并采取多块读,每次读取DB_FILE_MULTIBLOCK_READ_COUNT个块。查询某个表记录总数的时候,往往基于PRIMARY KEY的INDEX FAST FULL SCAN是最有效的。

Fast Full Index Scans :
Fast full index scans are an alternative to a full table scan when the index contains all the columns that are needed for the query, and at least one column in the index key has the NOT NULL constraint. A fast full scan accesses the data in the index itself, without accessing the table. It cannot be used to eliminate a sort operation, because the data is not ordered by the index key. It reads the entire index using multiblock reads, unlike a full index scan, and can be parallelized.

Fast full scan is available only with the CBO. You can specify it with the initialization parameter OPTIMIZER_FEATURES_ENABLE or the INDEX_FFS hint. Fast full index scans cannot be performed against bitmap indexes.

A fast full scan is faster than a normal full index scan in that it can use multiblock I/O and can be parallelized just like a table scan.

Full Table Scans : 
This type of scan reads all rows from a table and filters out those that do not meet the selection criteria. During a full table scan, all blocks in the table that are under the high water mark are scanned. Each row is examined to determine whether it satisfies the statement’s WHERE clause.

When Oracle performs a full table scan, the blocks are read sequentially. Because the blocks are adjacent, I/O calls larger than a single block can be used to speed up the process. The size of the read calls range from one block to the number of blocks indicated by the initialization parameter DB_FILE_MULTIBLOCK_READ_COUNT. Using multiblock reads means a full table scan can be performed very efficiently. Each block is read only once.


案例分析:


1、创建表和索引

16:02:10 SYS@ prod >create table t as select * from dba_objects where 1=2; Table created. 16:05:43 SYS@ prod >insert into t select * from dba_objects where object_id is not null; 73025 rows created. 16:06:46 SYS@ prod >select count(*) from t;   COUNT(*) ----------      73025       16:06:56 SYS@ prod >commit; Commit complete. 16:13:48 SYS@ prod >exec dbms_stats.gather_table_stats('SYS','T',cascade=>true); PL/SQL procedure successfully completed. 16:14:33 SYS@ prod >set autotrace trace 16:15:32 SYS@ prod >select object_id from t; 73025 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 1601196873 -------------------------------------------------------------------------- | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     | -------------------------------------------------------------------------- |   0 | SELECT STATEMENT  |      | 73025 |   356K|   284   (1)| 00:00:04 | |   1 |  TABLE ACCESS FULL| T    | 73025 |   356K|   284   (1)| 00:00:04 | -------------------------------------------------------------------------- Statistics ----------------------------------------------------------         141  recursive calls           0  db block gets        5857  consistent gets        1038  physical reads           0  redo size     1060958  bytes sent via SQL*Net to client       53963  bytes received via SQL*Net from client        4870  SQL*Net roundtrips to/from client           4  sorts (memory)           0  sorts (disk)       73025  rows processed   从上面的执行计划中可知,此时走了全表扫描。   --由于我们需要查询的列为object_id,因此理论上只需要读取索引就应该可以返回所有数据,而此时为什么是全表扫描呢?   --这是因为NULL值与索引的特性所决定的。即null值不会被存储到B树索引。因此应该为表 t 的列 object_id 添加 not null 约束。         16:16:14 SYS@ prod >desc t;  Name                                                              Null?    Type  ----------------------------------------------------------------- -------- --------------------------------------------  OWNER                                                                      VARCHAR2(30)  OBJECT_NAME                                                                VARCHAR2(128)  SUBOBJECT_NAME                                                             VARCHAR2(30)  OBJECT_ID                                                                  NUMBER  DATA_OBJECT_ID                                                             NUMBER  OBJECT_TYPE                                                                VARCHAR2(19)  CREATED                                                                    DATE  LAST_DDL_TIME                                                              DATE  TIMESTAMP                                                                  VARCHAR2(19)  STATUS                                                                     VARCHAR2(7)  TEMPORARY                                                                  VARCHAR2(1)  GENERATED                                                                  VARCHAR2(1)  SECONDARY                                                                  VARCHAR2(1)  NAMESPACE                                                                  NUMBER  EDITION_NAME                                                               VARCHAR2(30)    在object_id上添加not null约束 16:16:42 SYS@ prod >alter table t modify(object_id not null); Table altered. Elapsed: 00:00:00.34 16:16:46 SYS@ prod >desc t  Name                                                              Null?    Type  ----------------------------------------------------------------- -------- --------------------------------------------  OWNER                                                                      VARCHAR2(30)  OBJECT_NAME                                                                VARCHAR2(128)  SUBOBJECT_NAME                                                             VARCHAR2(30)  OBJECT_ID                                                         NOT NULL NUMBER  DATA_OBJECT_ID                                                             NUMBER  OBJECT_TYPE                                                                VARCHAR2(19)  CREATED                                                                    DATE  LAST_DDL_TIME                                                              DATE  TIMESTAMP                                                                  VARCHAR2(19)  STATUS                                                                     VARCHAR2(7)  TEMPORARY                                                                  VARCHAR2(1)  GENERATED                                                                  VARCHAR2(1)  SECONDARY                                                                  VARCHAR2(1)  NAMESPACE                                                                  NUMBER  EDITION_NAME                                                               VARCHAR2(30)

2、对Index_FS和Index_FFS对比

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

常见Web标准及其实际案例解析 常见Web标准及其实际案例解析 Jan 13, 2024 pm 03:50 PM

了解常见的Web标准及其实际应用案例在当今数字化时代,万维网已成为人们获取信息、进行交流和开展业务活动的重要平台。而Web标准则是保证网页在不同浏览器上正常显示和稳定运行的基础。本文将介绍一些常见的Web标准,并通过实际应用案例来说明它们的重要性。首先,HTML(超文本标记语言)是Web标准中最基础的一部分,用于描述网页的结构和内容。HTML使用标签来定义不

go语言的scan方法有什么用 go语言的scan方法有什么用 Mar 15, 2021 pm 04:46 PM

在go语言中,Scan()方法用于从标准输入“os.Stdin”读取文本,即从终端获取数据。该方法会返回成功读取的数据个数和遇到的任何错误;如果读取的数据个数比提供的参数少,会返回一个错误报告原因。

解决系统重装时的环境检测问题 解决系统重装时的环境检测问题 Jan 08, 2024 pm 03:33 PM

重装系统时环境检测未通过如何解决需要进行改写的原因是:手机中毒了,可以安装手机管家等杀毒软件进行杀毒2、手机内部存储了许多垃圾文件,导致手机运行内存被占用。只需清理手机缓存即可解决这个问题3、手机内存被保存的软件和文件占用太多,需要经常删除不需要的文件和软件没问题,只要你的硬件配置符合安装要求,你可以直接使用新的系统盘重新安装系统!你可以使用U盘或者硬盘来进行安装,速度非常快。但是关键是要使用兼容性好的系统盘(支持IDE、ACHI、RAID模式的安装),并且能够自动永久激活,已经经过验证的。这样

PHP开发案例:制作一个在线问答社区 PHP开发案例:制作一个在线问答社区 Oct 27, 2023 am 11:25 AM

在互联网时代的今天,越来越多的人喜欢在网上寻找答案和交流问题。于是,各种在线问答社区应运而生。这些社区为用户提供了一个平台,可以在这里提问问题、回答问题,同时也可以互相交流经验和知识。今天,我们将介绍一个基于PHP开发的在线问答社区的制作过程。首先,我们需要明确的是,一个在线问答社区需要具备哪些功能。通常来说,它应该包括以下几个方面:用户注册、登陆、提问、回

连续四年发布物联网案例,高通与生态伙伴共绘数实融合时代新蓝图 连续四年发布物联网案例,高通与生态伙伴共绘数实融合时代新蓝图 Oct 13, 2023 pm 08:25 PM

在繁忙的生产线上,机械臂高效协作,操作人员通过远程实时控制轻松掌控整个流程。在矿井下,技术专家戴着AR眼镜,通过眼镜中实时显示的信息与远在千里之外的技术团队快速解决设备问题。在园区内,无人配送车穿梭自如,用户足不出户就能取到包裹。这些场景并非虚构,而是出现在高通近期发布的《2023高通赋能企业数字化转型案例集》中的真实案例高通连续四年发布了针对物联网行业的重点发展方向和亮点落地场景的“物联网应用案例集”,以多角度立体化展示行业最新的技术方向和创新生态合作模式。今年的案例集聚焦于中国企业利用高通物

PHP函数库实用案例分享 PHP函数库实用案例分享 Jun 15, 2023 pm 09:06 PM

在现代化的网站开发中,PHP是一种非常流行的后端编程语言。随着时间的推移,越来越多的PHP函数库被开发出来,使得开发人员能够更快地编写程序并提高代码的可复用性。在本文中,我们将分享一些实用的PHP函数库案例,以帮助开发人员更好的运用这些函数库来提高自己的开发效率。阿里云OSSSDK阿里云的对象存储服务(OSS)是一种高可用、高扩展性的云储存服务。开发人员可

PHP中的面向对象编程案例 PHP中的面向对象编程案例 Jun 11, 2023 am 09:56 AM

PHP作为一种流行的服务器端编程语言,提供了丰富的面向对象编程功能。面向对象编程(Object-OrientedProgramming,OOP)是一种程序设计方法,通过把一个复杂的系统划分为多个单独的对象来简化开发和维护。本文将介绍PHP中的面向对象编程案例,并通过一个简单的示例来演示面向对象编程在PHP中的应用。一、面向对象编程的概念在PHP中,面向对象

golang泛型编程的实用案例 golang泛型编程的实用案例 Jan 20, 2024 am 10:43 AM

Golang泛型编程的实际应用案例,需要具体的代码示例引言:随着云计算、大数据和人工智能的发展,软件开发工程师面临的挑战日益增加。编程语言的泛型特性能够提供更高效、更灵活的解决方案,而Golang作为一门现代化的编程语言,终于在1.18版本中引入了泛型编程的支持。在本文中,我们将分享一些Golang泛型编程的实际应用案例,并提供具体的代码示例。简化容器的实现

See all articles