1. 程式人生 > >Oracle12C--索引(十八)

Oracle12C--索引(十八)

知識點的梳理:

  1. 可以使用自動跟蹤功能,來判斷當前查詢語句是否使用的全表掃描。如果使用索引來查詢,也可以通過這種方式來分辨當前是索引查詢,還是全表掃描;
  2. 索引是提升資料庫查詢效能的一種手段,但是頻繁更新資料表時,索引反而會造成效能的降低;

這是啥?

索引是專門用來提升資料庫查詢操作效能的;在Oracle中,為了維護這種查詢效能,需要對某一個類資料進行指定結構的排列;

B樹索引

該索引是Oracle預設建立的索引;
該索引在檢索“高基數數列”(該列上的重複內容較少或沒有)的時候可以提高效能;
示例:如果當前表中存在10W行資料,而2W行記錄之後已經不存在符合查詢要求的資料,如果此時繼續向下採用逐行掃描的方式明顯是浪費資源,這個時候就可以採用樹形排序方式;

假設該表中的工資資料為:1300,2850,1100,1600,2450,2975,5000,3000,1250,950,800,則按以下原則進行樹結構的繪製:

取第一個資料作為根節點;

比根節點小的資料放在左子樹,比根節點大的資料放在右子樹;

在進行資料排序的時候,除了使用sal欄位的內容之外,每一個操作節點中還儲存了一個ROWID的資訊,而利用此ROWID的資訊就可以找到對應的完整記錄;

B樹索引結構分析

葉子節點(Leaf Node):包含直接指向表中的資料行(即:索引項);該節點儲存的就是索引項,而索引項由3個部分組成:

索引項頭:儲存了行數和所得資訊;

索引列長度和值:兩者需要同時出現,定義了列的長度,在長度之後儲存的就是列的內容;

ROWID:指向表中資料行的ROWID,通過此ROWID找到完整記錄;

分支節點(Branch Node):包含指向索引裡其他的分支節點或葉子節點;

根節點(Root Node):一個B樹索引只有一個根節點,是位於最頂端的分支節點;

建立B*Tree索引方法:

方法1:當某一個列上設定了主鍵約束或唯一約束,則會自動建立約束;

方法2:利用命令直接建立索引;

語法:

create index [使用者名稱.]索引名 on[使用者名稱.]表名稱 (列名稱 [ASC|DESC],....);

create index emp_sal_ind on emp(sal);
--在emp表的sal欄位上建立了一個索引,這會自動地在記憶體中將相關的資料形成一顆索引樹,以提升查詢效能;

通過user_indexes資料字典,檢視哪張表存在索引:

SELECT index_name , index_type , table_owner , table_name , uniqueness , status FROM user_indexes ;
通過emp_sal_ind資料字典,查看錶中的哪列存在索引:
SELECT * FROM user_ind_columns WHERE index_name='EMP_SAL_IND' ;

如何利用B樹索引提升查詢效能?

最方便的方法是準備兩張表,A表進行資料的更新,B表在每天資料庫空閒時間,將A表更新後的資料儲存在B表,同時B表上設定索引,使用者檢索利用B表,更新使用A表,就可以提升效能;

但是這樣做會犧牲速度;

點陣圖索引

當某一個列的資料都屬於低基數列的時候,就可以利用點陣圖索引來提升效能;
例如,表示僱員的資料表上會存在部門編號的資料列,而在部門編號列上只有3種取值,分別是10,20,30,此時就可以使用點陣圖索引;如果僱員的資料表包含30萬條資料,那麼按照點陣圖索引,可以將這些資料,按照部門編號分成3組進行查詢,在效率上是一定快過直接進行全表掃描的;

語法:create bitmap index [使用者名稱.]索引名稱 on[使用者名稱.]表名稱 (列名稱 [asc|desc],...);

示例:CREATE BITMAP INDEX emp_deptno_ind ON emp(deptno) ;

通過“user_indexes”資料字典檢視索引
SELECT index_name , index_type , table_owner , table_name , uniqueness , status FROM user_indexes ;


刪除索引

索引自身需要進行資料結構的維護,會佔用較大的磁碟空間,隨著表的增長,索引所佔的空間也會增大;索引被刪除後,其所佔空間也會被一同釋放; 刪除語法:drop index索引名稱;
示例:DROPINDEX emp_sal_ind ;


相關推薦

Oracle12C--索引

知識點的梳理: 可以使用自動跟蹤功能,來判斷當前查詢語句是否使用的全表掃描。如果使用索引來查詢,也可以通過這種方式來分辨當前是索引查詢,還是全表掃描;索引是提升資料庫查詢效能的一種手段,但是頻繁更新資

Python

地址 聯網 ren 英雄 eth 參數 攻擊 聲明 機制 一 什麽是面向對象的程序設計及為什麽要有它 面向過程的程序設計的核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麽時候處理什麽東西。 優點是:極大的降低了程序的復

Python爬蟲從入門到放棄之 Scrapy爬取所有知乎用戶信息(上)

user 說過 -c convert 方式 bsp 配置文件 https 爬蟲 爬取的思路 首先我們應該找到一個賬號,這個賬號被關註的人和關註的人都相對比較多的,就是下圖中金字塔頂端的人,然後通過爬取這個賬號的信息後,再爬取他關註的人和被關註的人的賬號信息,然後爬取被關註人

【轉】JMeter學習JMeter測試Java

sets interval permsize int 文件 不同 時間 結果 argument 實例: 服務為:將輸入的兩個參數通過IO存入文件; 1、打開MyEclipse,編寫Java代碼 服務: package test; import java.io.F

selenium測試Java--執行JS

val str max dimen inpu umt 測試 import selector 1. 操作滾動條 package com.test.js; import org.openqa.selenium.By; import org.openqa.selenium.

Python學習筆記@property

assert value 復雜 blog 只讀 self %d idt 學習 # [email protected]/* */, # 以及一個只讀屬性resolution: # -*- coding: utf-8 -*- class Screen(

javaDOM

java domDOMDOM:document Object Model(文檔對象模型) 用來將標記型文檔封裝成對象,並將標記型文檔中的所有內容(標簽,文本,屬性等)都封裝成對象。 封裝成對象的目的是為了更為方便的操作這些文檔以及文檔中的內容。 因為對象的出現就可以有屬性和行為被調用

設計模式---模板方法模式

strac string package style prim res 不同的 好的 clas 1、簡介   模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式實現,然後聲明一些抽象方法來迫使子類實現剩余的邏輯。   不同的子類可以以不同

Python學習筆記

一個 模式 時間模塊 dal 同名 學習 日期時間 mda dst 一、datetime簡介   datetime是Python處理日期和時間的標準庫 二、導入datetime日期時間處理標準庫   # datetime是日期時間模塊,其中包括一個同名的日期時間類  fro

設計模式——職責鏈模式

設計模式 職責鏈模式設計模式(十八)——職責鏈模式一、職責鏈模式簡介1、職責鏈模式簡介職責鏈模式(Chain Of Responsibility)使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合。將可能處理請求的對象連成一條鏈,並沿著這條鏈傳遞請求,直到有一個對象處理請求為止。2、職責連模式

使用springfox+swagger2書寫API文檔

添加 沒有 mit core 註意 集合 ota ignore sta 使用springfox+swagger2書寫API文檔 springfox是通過註解的形式自動生成API文檔,利用它,可以很方便的書寫restful API,swagger主要用於展示springfox

JmeterLogic Controller 之 Random Controller and Random order Controller

一個 random 執行 alt 簡單 log 控制器 image nbsp Random Controller就比較簡單了,完全隨機!毫無章法。 毫無任何規律的運行。 還有一個Random order Controller,隨機順序控制器就像一個簡單的控制器,它將最多

Linux命令 壓縮或解壓縮文件和目錄 gzip gunzip

配置 硬鏈接 名稱 log logs 壓縮文件 mark 底部 linux 目錄 1.命令簡介 2.常用參數介紹 3.實例 4.直達底部 命令簡介 和 zip 命令類似,gzip 用於文件的壓縮,gzip壓縮後的文件擴展名為 ".gz",gzip默認壓縮後會刪除源文

ShaderLab學習小結cubemap

mar shader sha pass mage text 向量 平行光 cgp 現在還沒用到cubemap(除了天空盒子),只是初步的學了一下最簡單的cubemap的shader找一幅圖好吧,有點大,在unity裏把它設置成cubemapOK,圖有了,看shader,代碼

企業分布式微服務雲SpringCloud SpringBoot mybatis springboot在啟動時註入了哪些bean

contex 測試 gree names system com clas temp ice 在程序入口加入: @SpringBootApplication public class SpringbootFirstApplication { public stat

Linux學習筆記 vim、編輯模式、vim實踐練習

編輯模式 命令模式 vim實踐 一、 編輯模式 命令行模式替換時如果需要替換的字符中有/符號,那麽可以將分隔符換成#或者@ :1,100s#/good/weer/#well#g 將前一百行中的/good/weer/替換為well,:nohl 取消搜索時的高亮顯示,:x也是保存並退出,但是如果並

Python+Selenium筆記:持續集成jenkins

每次 repo adt webdriver 測試的 ews equal unit pcl (一)安裝xmlrunner 使用Jenkins執行測試時,測試代碼中會用到這個模塊。 pip install xmlrunner (二)安裝jenkins (1) 下載jeki

Hadoop學習之路MapReduce框架Combiner分區

類型 規則 比較 一個 學習 過程 key-value body 註意 對combiner的理解 combiner其實屬於優化方案,由於帶寬限制,應該盡量map和reduce之間的數據傳輸數量。它在Map端把同一個key的鍵值對合並在一起並計算,計算規則與reduce一致

C之編譯和鏈接

C語言 編譯 靜態鏈接 動態鏈接 我們平時所做的編譯工作其實是由編譯器來完成的,那麽編譯器都是由哪幾部分構成的呢?包括四大部分:預處理器、編譯器、匯編器以及鏈接器組成。我們來看看一個由 file.c 文件是怎樣得到 file.o 文件的,如下 a> 預編譯:

Hive學習之路 Hive的Shell操作

int one 依次 也會 not show div ble ive 遞增 一、Hive的命令行 1、Hive支持的一些命令 Command Description quit Use quit or exit to leave the interactive sh