国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

帶你輕松接觸Oracle執行計劃的相關概念

2024-08-29 13:52:19
字體:
來源:轉載
供稿:網友

Oracle執行計劃的相關概念:

Rowid:系統給oracle數據的每行附加的一個偽列,包含數據表名稱,數據庫id,存儲數據庫id以及一個流水號等信息,rowid在行的生命周期內唯一。

Recursive sql:為了執行用戶語句,系統附加執行的額外操作語句,譬如對數據字典的維護等。

Row source(行源):oracle執行步驟過程中,由上一個操作返回的符合條件的行的集合。

PRedicate(謂詞):where后的限制條件。

Driving table(驅動表):又稱為連接的外層表,主要用于嵌套與hash連接中。一般來說是將應用限制條件后,返回較少行源的表作為驅動表。在后面的描述中,將driving table稱為連接操作的row source 1。

Probed table(被探查表):連接的內層表,在我們從driving table得到具體的一行數據后,在probed table中尋找符合條件的行,所以該表應該為較大的row source,并且對應連接條件的列上應該有索引。在后面的描述中,一般將該表稱為連接操作的row source 2.

Concatenated index(組合索引):一個索引如果由多列構成,那么就稱為組合索引,組合索引的第一列為引導列,只有謂詞中包含引導列時,索引才可用。

可選擇性:表中某列的不同數值數量/表的總行數如果接近于1,則列的可選擇性為高。

Oracle訪問數據的存取方法:

Full table scans, FTS(全表掃描):通過設置db_block_multiblock_read_count可以設置一次IO能讀取的數據塊個數,從而有效減少全表掃描時的IO總次數,也就是通過預讀機制將將要訪問的數據塊預先讀入內存中。只有在全表掃描情況下才能使用多塊讀操作。

Table access by rowed(通過rowid存取表,rowid lookup):由于rowid中記錄了行存儲的位置,所以這是oracle存取單行數據的最快方法。

Index scan(索引掃描index lookup):在索引中,除了存儲每個索引的值外,索引還存儲具有此值的行對應的rowid值,索引掃描分兩步1,掃描索引得到rowid;2,通過 rowid讀取具體數據。每步都是單獨的一次IO,所以如果數據經限制條件過濾后的總量大于原表總行數的5%-10%,則使用索引掃描效率下降很多。而如果結果數據能夠全部在索引中找到,則可以避免第二步操作,從而加快檢索速度。

根據索引類型與where限制條件的不同,有4種類型的索引掃描:

Index unique scan(索引唯一掃描):存在unique或者primary key的情況下,返回單個rowid數據內容。

Index range scan(索引范圍掃描):1,在唯一索引上使用了range操作符(>,<,<>,>=,<=,between);2,在組合索引上,只使用部分列進行查詢;3,對非唯一索引上的列進行的查詢。

Index full scan(索引全掃描):需要查詢的數據從索引中可以全部得到。

Index fast full scan(索引快速掃描):與index full scan類似,但是這種方式下不對結果進行排序。

目前為止,典型的連接類型有3種:

Sort merge join(SMJ排序-合并連接):首先生產driving table需要的數據,然后對這些數據按照連接操作關聯列進行排序;然后生產probed table需要的數據,然后對這些數據按照與driving table對應的連接操作列進行排序;最后兩邊已經排序的行被放在一起執行合并操作。排序是一個費時、費資源的操作,特別對于大表。所以smj通常不是一個特別有效的連接方法,但是如果driving table和probed table都已經預先排序,則這種連接方法的效率也比較高。

Nested loops(NL嵌套循環):連接過程就是將driving table和probed table進行一次嵌套循環的過程。就是用driving table的每一行去匹配probed table 的所有行。Nested loops可以先返回已經連接的行,而不必等待所有的連接操作處理完成才返回數據,這可以實現快速的響應時間。

Hash join(哈希連接):較小的row source被用來構建hash table與bitmap,第二個row source用來被hashed,并與第一個row source生產的hash table進行匹配。以便進行進一步的連接。當被構建的hash table與bitmap能被容納在內存中時,這種連接方式的效率極高。但需要設置合適的hash_area_size參數且只能用于等值連接中。

Cartesian product(笛卡爾積):表的每一行依次與另外一表的所有行匹配。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 姜堰市| 尼勒克县| 长子县| 清徐县| 长乐市| 怀化市| 慈溪市| 通渭县| 屯留县| 娄烦县| 顺义区| 阆中市| 邵阳县| 棋牌| 闻喜县| 中宁县| 崇阳县| 金坛市| 永济市| 京山县| 南乐县| 乌苏市| 霍山县| 新民市| 洮南市| 邵阳县| 中江县| 中阳县| 万安县| 鄢陵县| 周宁县| 怀化市| 衡南县| 莱芜市| 常山县| 时尚| 竹北市| 时尚| 平阴县| 信阳市| 白朗县|