通过案例学调优之--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 Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在go語言中,Scan()方法用於從標準輸入“os.Stdin”讀取文本,即從終端獲取資料。此方法會傳回成功讀取的資料個數和遇到的任何錯誤;如果讀取的資料個數比提供的參數少,會傳回一個錯誤報告原因。

了解常見的Web標準及其實際應用案例在當今數位化時代,萬維網已成為人們獲取資訊、進行交流和開展業務活動的重要平台。而Web標準則是確保網頁在不同瀏覽器上正常顯示並穩定運作的基礎。本文將介紹一些常見的Web標準,並透過實際應用案例來說明它們的重要性。首先,HTML(超文本標記語言)是Web標準中最基礎的一部分,用來描述網頁的結構和內容。 HTML使用標籤來定義不

重裝系統時環境偵測未通過如何解決需要進行改寫的原因是:手機中毒了,可以安裝手機管家等防毒軟體進行防毒軟體進行防毒2、手機內部儲存了許多垃圾文件,導致手機運作記憶體被佔用。只要清理手機快取即可解決這個問題3、手機記憶體被保存的軟體和檔案佔用太多,需要經常刪除不需要的檔案和軟體沒問題,只要你的硬體設定符合安裝要求,你可以直接使用新的系統磁碟重新安裝系統!你可以使用U盤或硬碟來進行安裝,速度非常快。但是關鍵是要使用相容性好的系統碟(支援IDE、ACHI、RAID模式的安裝),並且能夠自動永久激活,已經經過驗證的。這樣

在網路時代的今天,越來越多的人喜歡在網路上尋找答案和交流問題。於是,各種線上問答社群應運而生。這些社群為使用者提供了一個平台,可以在這裡提問、回答問題,同時也可以互相交流經驗和知識。今天,我們將介紹一個基於PHP開發的線上問答社群的製作過程。首先,我們需要明確的是,一個線上問答社群需要具備哪些功能。通常來說,它應該包括以下幾個方面:用戶註冊、登陸、提問、回

在繁忙的生產線上,機械手臂高效協作,操作人員透過遠端即時控制輕鬆掌控整個流程。在礦井下,技術專家戴著AR眼鏡,透過眼鏡中即時顯示的資訊與遠在千里之外的技術團隊快速解決設備問題。在園區內,無人配送車穿梭自如,用戶足不出戶就能取到包裹。這些場景並非虛構,而是出現在高通近期發布的《2023高通賦能企業數位轉型案例集》中的真實案例高通連續四年發布了針對物聯網行業的重點發展方向和亮點落地場景的“物聯網應用案例集”,以多角度立體化展示行業最新的技術方向和創新生態合作模式。今年的案例集聚焦於中國企業利用高通物

在現代化的網站開發中,PHP是一種非常流行的後端程式語言。隨著時間的推移,越來越多的PHP函數庫被開發出來,使得開發人員能夠更快地編寫程式並提高程式碼的可重複使用性。在本文中,我們將分享一些實用的PHP函數庫案例,以幫助開發人員更好的運用這些函數庫來提高自己的開發效率。阿里雲端OSSSDK阿里雲端的物件儲存服務(OSS)是一種高可用、高擴充性的雲端儲存服務。開發人員可

PHP作為一種流行的伺服器端程式語言,提供了豐富的物件導向程式設計功能。物件導向程式設計(Object-OrientedProgramming,OOP)是一種程式設計方法,透過把一個複雜的系統分成多個單獨的物件來簡化開發和維護。本文將介紹PHP中的物件導向程式設計案例,並透過一個簡單的範例來示範物件導向程式設計在PHP中的應用。一、物件導向程式設計的概念在PHP中,物件導向

Golang泛型程式設計的實際應用案例,需要具體的程式碼範例引言:隨著雲端運算、大數據和人工智慧的發展,軟體開發工程師面臨的挑戰日益增加。程式語言的泛型特性能夠提供更有效率、更靈活的解決方案,而Golang作為一門現代化的程式語言,終於在1.18版本中引入了泛型程式設計的支援。在本文中,我們將分享一些Golang泛型程式設計的實際應用案例,並提供具體的程式碼範例。簡化容器的實現
