通过案例学调优之--Index FULL SCAN和Index FAST FULL 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对比

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Go 언어에서 Scan() 메서드는 표준 입력 "os.Stdin"에서 텍스트를 읽는 데, 즉 터미널에서 데이터를 얻는 데 사용됩니다. 이 메소드는 성공적으로 읽은 데이터 수와 발생한 오류를 반환합니다. 읽은 데이터 수가 제공된 매개변수보다 적으면 오류 보고 이유가 반환됩니다.

일반적인 웹 표준과 실제 적용 사례 이해 오늘날의 디지털 시대에 월드 와이드 웹은 사람들이 정보를 얻고, 소통하고, 비즈니스 활동을 수행하는 중요한 플랫폼이 되었습니다. 웹 표준은 웹 페이지가 다른 브라우저에서 정상적으로 표시되고 안정적으로 작동하도록 보장하는 기반입니다. 이 기사에서는 몇 가지 일반적인 웹 표준을 소개하고 실제 적용 사례를 통해 그 중요성을 설명합니다. 먼저, HTML(Hypertext Markup Language)은 웹 표준의 가장 기본적인 부분으로 웹 페이지의 구조와 내용을 기술하는 데 사용됩니다. HTML은 태그를 사용하여 다음을 정의합니다.

시스템 재설치 시 환경 테스트가 실패하고 다시 작성해야 하는 문제를 해결하는 방법: 휴대폰이 중독되었습니다. 2. 바이러스 백신용 모바일 관리자와 같은 바이러스 백신 소프트웨어를 설치할 수 있습니다. 파일이 휴대폰 내부에 저장되어 휴대폰의 실행 메모리를 점유하게 됩니다. 3. 저장된 소프트웨어와 파일이 휴대폰 메모리를 너무 많이 차지하므로 하드웨어 구성이 설치 요구 사항을 충족하는 한 불필요한 파일과 소프트웨어를 자주 삭제하는 것은 문제가 되지 않습니다. 새 것을 시스템 디스크에서 직접 다시 설치하십시오! USB 플래시 드라이브나 하드 디스크를 사용하여 설치할 수 있으며 이는 매우 빠릅니다. 하지만 핵심은 호환성이 좋고(IDE, ACHI, RAID 모드에서 설치 지원) 자동으로 영구적으로 활성화될 수 있는 검증된 시스템 디스크를 사용하는 것입니다. 그래서

분주한 생산 라인에서 로봇 팔은 효율적으로 협업하고, 작업자는 원격 실시간 제어를 통해 전체 프로세스를 쉽게 제어할 수 있습니다. 광산 지하에서는 기술 전문가들이 AR 안경을 착용하고 안경에 실시간으로 표시되는 정보를 활용해 수천 마일 떨어진 기술팀과 함께 장비 문제를 신속하게 해결합니다. 공원 내에는 무인택배 차량이 자유롭게 왕복 운행해 사용자가 집을 떠나지 않고도 택배를 수령할 수 있다. 이러한 시나리오는 허구가 아니며, 퀄컴이 최근 발표한 '2023 Qualcomm Empowering Enterprise Digital Transformation Case Collection'에 등장하는 실제 사례입니다. 사물 인터넷 산업의 구현 시나리오 "응용 사례 모음"은 업계의 최신 기술 방향과 혁신적인 생태 협력 모델을 다차원적이고 입체적인 방식으로 보여줍니다. 올해 사례집은 중국 기업의 퀄컴 기술 활용에 초점을 맞췄다.

오늘날의 인터넷 시대에는 점점 더 많은 사람들이 온라인에서 질문에 대한 답을 찾고 소통하는 것을 좋아합니다. 그 결과 다양한 온라인 질의응답 커뮤니티가 생겨났다. 이러한 커뮤니티는 사용자가 질문하고, 질문에 답하고, 경험과 지식을 서로 교환할 수 있는 플랫폼을 제공합니다. 오늘은 PHP를 기반으로 개발된 온라인 Q&A 커뮤니티의 제작 과정을 소개하겠습니다. 먼저, 온라인 Q&A 커뮤니티가 어떤 기능을 갖추어야 하는지 명확히 할 필요가 있습니다. 일반적으로 여기에는 사용자 등록, 로그인, 질문, 답변 등의 측면이 포함되어야 합니다.

널리 사용되는 서버 측 프로그래밍 언어인 PHP는 풍부한 객체 지향 프로그래밍 기능을 제공합니다. OOP(객체 지향 프로그래밍)는 복잡한 시스템을 여러 개의 개별 객체로 나누어 개발 및 유지 관리를 단순화하는 프로그래밍 방법입니다. 이 기사에서는 PHP의 객체 지향 프로그래밍 사례를 소개하고 간단한 예제를 통해 PHP의 객체 지향 프로그래밍 적용을 보여줍니다. 1. 객체지향 프로그래밍의 개념 PHP에서 객체지향은

PHP는 현대 웹사이트 개발에서 매우 인기 있는 백엔드 프로그래밍 언어입니다. 시간이 지남에 따라 점점 더 많은 PHP 함수 라이브러리가 개발되어 개발자가 프로그램을 더 빠르게 작성하고 코드 재사용성을 향상시킬 수 있습니다. 이 기사에서는 개발자가 이러한 함수 라이브러리를 더 잘 사용하여 개발 효율성을 향상시킬 수 있도록 몇 가지 실용적인 PHP 함수 라이브러리 사례를 공유합니다. Alibaba Cloud OSSSDK Alibaba Cloud의 OSS(객체 스토리지 서비스)는 가용성과 확장성이 뛰어난 클라우드 스토리지 서비스입니다. 개발자는 다음을 수행할 수 있습니다.

특정 코드 예제가 필요한 Golang 일반 프로그래밍의 실제 적용 사례 소개: 클라우드 컴퓨팅, 빅 데이터 및 인공 지능의 발전으로 소프트웨어 개발 엔지니어가 직면한 과제는 날로 증가하고 있습니다. 프로그래밍 언어의 제네릭 기능은 보다 효율적이고 유연한 솔루션을 제공할 수 있으며, 현대 프로그래밍 언어인 Golang은 마침내 버전 1.18에서 제네릭 프로그래밍에 대한 지원을 도입했습니다. 이 기사에서는 Golang 일반 프로그래밍의 실제 적용 사례를 공유하고 구체적인 코드 예제를 제공합니다. 컨테이너 구현 단순화
