oracle索引分類與區分,深入理解Oracle表(6):堆組織表(HOT)和索引組織表(IOT)的區別...

摘要:

堆表:又稱堆組織表,常用的表類型,以堆的方式管理,當增加數據時,將使用段中第一個適合數據大小的空閑空間。當刪除數據時,留下的空間允許以后的DML操作重用。 堆組織表(heap table)

應用中99%(或者更多)的情況下使用的可能都是堆組織表,不過隨著IOT的出現,這種狀況以后可能會有所改觀,因為IOT本身就可以加索引。執行 CREATE TABLE語句時,默認得到的表類型就是堆組織表。如果你想要任何其他類型的表結構,就需要在CREATE語句本身中指定它。

堆 (heap)是計算機科學領域中得到深入研究的一種經典數據結構。它實際上就是一個很大的空間、磁盤或內存區(當然,這里所說的磁盤是指數據庫表的相應磁 盤),會以一種顯然隨機的方式管理。數據會放在最合適的地方,而不是以某種特定順序來放置。許多人希望能按數據放入表中的順序從表中取出數據,但是對于 堆,這是無法保證的。這一點很容易說清楚。 參見:

oracle表類型? http://suntengjiao1.blog.163.com/blog/static/99211088200982522251123/

㈠ HOT和IOT的起源

堆組織表的存儲速度因為不用考慮排序, 所以存儲速度會比較快. 但是要查找符合某個條件的記錄, 就必須得讀取全部的記錄以便篩選.

而這個時候為了加快查詢速度, 索引就出現了, 索引是針對少量特定字段的值拿出來進行排序存儲, 并記錄在表中的位置,

而因為索引是有序的, 所以就會很容易通過索引查詢到具體的記錄位置, 然后再根據記錄位置直接從表中讀取該記錄.

同時因為索引的字段較少, 所以索引通常會比其基表小得多.

從上面通過索引訪問表記錄的方式可以看出, 當要訪問的數據量較大時, 通過每一條記錄的位置去訪問原始記錄,

每一條符合條件的記錄都需要經過索引訪問后再訪問基表這樣一個復雜的過程, 這會花費很多時間,

同樣, 如果不經過索引而直接查詢表, 也可能因為表字段太多, 記錄較大的情況下把全部的數據讀取進來, 這也會花費很多時間.

那怎么辦呢?

這個時候就會想到, 如果表中數據本身就是有序的, 這樣查詢表的時候就可以快速的找到符合條件的記錄位置,

而很容易判斷符合條件記錄的位置, 這樣只需要讀取一小部分數據出來就可以了, 不需要全表記錄都讀取出來進行判斷.

索引表就這樣產生了.當然索引表中插入,更新資料的時候可能會因為需要排序而將數據重組, 這時候數據插入或更新速度會比堆組織表慢一些.

如果堆組織表上有索引, 那么對堆組織表的插入也會因為要修改索引而變慢

我們可以看到堆組織表+索引的方式 與 索引表 都能夠實現數據的快速查找, 那為什么不全部采用索引表呢, 這樣不是很簡單嗎?

我能想到的是前者我們可以針對不同的查找條件建立多個索引, 而后者卻不行, 后者只能對某一組查詢條件有效.

當然了,索引表上查詢任何記錄都是走索引的, 因為它本身就是索引結構.

當查詢條件不符合指定條件時, 必須走 index full sacn , 需要掃描全部索引.

這就是說這時無法利用索引表已經根據某些字段排序的事實.也即排序對于這個查詢來說無用.

而符合指定的條件時就會走 index range scan

㈡ 定義

① 堆組織表,其索引中記錄了記錄所在位置的rowid,查找的時候先找索引,然后再根據索引rowid找到塊中的行數據。索引和表數據是分離的

② 索引組織表,其行數據以索引形式存放,因此找到索引,就等于找到了行數據。索引和數據是在一起的

㈢ 查找過程 ? ? ? ? ? ? ? ?① 堆組織表 ? ? ? ? ?? ? ? ? ? ? 一般索引大概3-5層,比如rowid為007,那么要找到007可能會先從第一層找<1000,再在第二層找到<100 ? ? ? ? ? 然后在第三層找到007(注意這已經是3次I/O) ? ? ? ? ? 接著再通過007中標識的rowid去對應的磁盤上讀取塊中的行數據(第4次I/O) ? ? ? ? ? ? ? ?② 索引組織表 ? ? ? ? ?? ? ? ? ? ? 前面的步驟同上,但是找到007后,由于數據和索引在一起,因此不必再找什么rowid,直接返回結果了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452623.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flask愛家租房--發布新房源(總結)

重點總結 學習過程中&#xff0c;發現house_id貫穿兩個接口內容&#xff0c;現對后端邏輯部分做以下總結&#xff1a; 1&#xff09;房東首先在前端填寫房屋的基本信息&#xff0c;此時通過newhouse.js文件$("#form-house-info").submit(function (e) {…}進行處理&…

關系的三類完整性約束

規則2.1實體完整性規則&#xff08;Entity Integrity&#xff09;若屬性A是基本關系R的主屬性&#xff0c;則屬性A不能取空值空值就是“不知道”或“不存在”或“無意義”的值例&#xff1a; 選修&#xff08;學號&#xff0c;課程號&#xff0c;成績&#xff09; “學號、課…

[QNAP crontab 定時執行程式

注意要自動執行的 sh 檔不要放在 /root 裡, 不然韌體更新後檔案會不見, 要放在個人帳號的資料夾&#xff0c;例如 /share/homes/帳號/ QNAP 的 crontab 放在 /etc/config/crontabvi /etc/config/crontab 例如要每日5:00執行 backup.sh 的話&#xff0c;加上這行 00 5 * * * /s…

調整標志位方法oracle,面試題(二)(示例代碼)

1.查找/us/oc al/nginx/ogs下更改時間在7天前以log 后極的文件井移動到sr/oca/nginx/log/backup下(至少兩種方法)2. Centos 查看某個進程的環境安量3.簡述DNS迭代查詢和遞歸直詢的區別4.簡述TCP三次握手過程以及涉及到的狀態(可畫草圖) ?5.統計TCP連接狀態(至少兩種方法)6.發現…

國際最具潛力IT專業認證

正如很多的爭論一樣&#xff0c;IT認證也是現在爭論的熱點&#xff0c;在IT專業人士的世界里&#xff0c;IT認證對于其職業規劃有著很大的影響。在時下究竟哪個認證才具有最大意義呢&#xff1f;本文羅列了十個最具潛力的技術認證&#xff0c;一起來看看都有哪些吧&#xff01;…

關系代數

關系代數是一種抽象的查詢語言&#xff0c;它用對關系的運算來表達查詢關系代數運算對象是關系運算結果亦為關系關系代數的運算符有兩類&#xff1a;集合運算符和專門的關系運算符

設計模式的六大原則

設計模式是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更加容易被他人理解、保證代碼可靠性。設計模式是代碼編制真正工程化&#xff08;工程化即系統化、模塊化、規范化的一個過程。指將具有一定規模數量的單個…

作業7

stuNum 201709090072 print(年級是&#xff1a;stuNum[0:4]) print(專業編號是: stuNum[4:9]) print(序號是: stuNum[-3:]) stuNum 440982201812111876 print(所在省市&#xff1a;stuNum[0:2]) print(所在地區&#xff1a;stuNum[2:4]) print(所在縣區&#xff1a;stuNum[4:…

linux進程退出沒有log,Linux下應用進程消失原因分析-Go語言中文社區

應用部署在Linux環境下&#xff0c;如果出現未知原因導致應用進程被殺(應用日志中沒有任何異常現象&#xff0c;日志出現中斷現象)&#xff0c;如果對于進程消失原因沒有特別明確的方向&#xff0c;可以考慮從系統日志(/var/log/messages)方面查找原因。 命令參考egrep -i kill…

數學是成就卓越開發人員的必備技能

編者按&#xff1a;原文作者Alan Skorkin是一名軟件開發人員&#xff0c;他在博客中分享對軟件開發相關的心得&#xff0c;其中有很多優秀的文章&#xff0c;本文就是其中一篇&#xff0c;作者認為&#xff1a;成為優秀的開發人員&#xff0c;可以沒有數學技能&#xff0c;但成…

Flask愛家租房--celery(總結)

0. celery整體邏輯圖 個人理解為&#xff1a;此處的客戶端client與以往定義的客戶端&#xff08;前端&#xff09;并不一樣&#xff0c;角色相當于以往的后端邏輯處理代碼&#xff0c;即發布任務的一方&#xff0c;只是相當于處理者worker而言是客戶端。 1.準備工作&#xff1…

linux端口514啟動,Linux查看端口使用狀態及啟動(示例代碼)

Netstat -tln 命令是Linux查看端口使用情況/etc/init.d/vsftp start 是用來啟動ftp端口~&#xff01;看文件/etc/servicesnetstatLinux查看端口查看已經連接的服務端口(ESTABLISHED)netstat -aLinux查看端口查看所有的服務端口(LISTEN&#xff0c;ESTABLISHED)sudo netstat -ap…

window服務器開站點(不通用)

此文章為記錄自己的配置流程&#xff0c;其他人不通用 網站服務器&#xff1a;Windows server 2008 R2 (IIS6.1) Asp.net 數據庫服務器&#xff1a;Windows server 2008 R2 SQL Server 2008 R2 1.解析域名到服務器&#xff0c;如&#xff1a;www.test.com 2.登錄網站服務器&a…

【轉載】優秀文章轉載集合

Spring Spring Cache 注釋驅動的 Spring cache 緩存介紹使用 Spring 2.5 注釋驅動的 IoC 功能虛擬化 libvirt kvm 虛擬機上網 – Bridge橋接KVM詳解&#xff0c;太詳細太深入了&#xff0c;經典Tomcat Linux機器同時運行兩個tomcat點評&#xff1a;主要是那張圖片的配置 Nginx …

Flask愛家租房--celery(發送驗證短信)

0.配置文件 # coding:utf-8BROKER_URL "redis://127.0.0.1:6379/1" CELERY_RESULT_BACKEND redis://127.0.0.1:6379/21.啟動文件 # coding:utf-8from celery import Celery from ihome.tasks import config# 定義celery對象 celery_app Celery("ihome"…

理論與實踐:不要過度思考

你每天都在仔細翻閱Hacker News&#xff0c;驚奇于那些經過整理的創業傳奇、功效無比的最佳實踐理論、天才的技術解決方案&#xff0c;以及各種鏈接指向的大量的一站式的&#xff0c;極簡主義的&#xff0c;色彩柔和的網站。你參加過精益(Lean)創業研討會&#xff0c;讀過了《F…

linux我如何查看一個腳本的路徑,linux獲取shell腳本所在絕對路徑操作介紹

腳本名&#xff1a;a.sh位置&#xff1a;/tmp/whuang/study/java腳本內容&#xff1a;復制代碼代碼如下:#!/bin/shthis_dirpwddirname $0|grep "^/" >/dev/nullif [ $? -eq 0 ];thenthis_dirdirname $0elsedirname $0|grep "^/." >/dev/nullretval$…

Go編程技巧--io.Reader/Writer

Go原生的pkg中有一些核心的interface&#xff0c;其中io.Reader/Writer是比較常用的接口。很多原生的結構都圍繞這個系列的接口展開&#xff0c;在實際的開發過程中&#xff0c;你會發現通過這個接口可以在多種不同的io類型之間進行過渡和轉化。本文結合實際場景來總結一番。 總…