데이터 베이스 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 기반 앱

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Go 언어에서 스캔 방법의 용도는 무엇입니까? Go 언어에서 스캔 방법의 용도는 무엇입니까? Mar 15, 2021 pm 04:46 PM

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

일반적인 웹 표준과 실제 사례 분석 일반적인 웹 표준과 실제 사례 분석 Jan 13, 2024 pm 03:50 PM

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

시스템 재설치 시 환경 감지 문제 해결 시스템 재설치 시 환경 감지 문제 해결 Jan 08, 2024 pm 03:33 PM

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

4년 연속 IoT 사례 출시, 퀄컴과 생태학적 파트너, 디지털-리얼 통합 시대를 위한 새로운 청사진 공동 그려 4년 연속 IoT 사례 출시, 퀄컴과 생태학적 파트너, 디지털-리얼 통합 시대를 위한 새로운 청사진 공동 그려 Oct 13, 2023 pm 08:25 PM

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

PHP 개발 사례: 온라인 질문과 답변 커뮤니티 만들기 PHP 개발 사례: 온라인 질문과 답변 커뮤니티 만들기 Oct 27, 2023 am 11:25 AM

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

PHP의 객체 지향 프로그래밍 사례 PHP의 객체 지향 프로그래밍 사례 Jun 11, 2023 am 09:56 AM

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

PHP 함수 라이브러리 실제 사례 공유 PHP 함수 라이브러리 실제 사례 공유 Jun 15, 2023 pm 09:06 PM

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

golang 일반 프로그래밍의 실제 사례 golang 일반 프로그래밍의 실제 사례 Jan 20, 2024 am 10:43 AM

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

See all articles