手把手教你19c新特性:自動索引

2021-12-12 甲骨文雲技術

感謝各位訂閱者的支持,我們將在近期推出一系列「手把手教你」文章,並在不久的將來,將連續發布「零基礎學習」系列文章,內容將涵蓋SQL基礎,PL/SQL基礎,資料庫體系結構等普及類文章,每個系列都將有10-20篇文章組成,將以連載的方式集中發布,期待您的點閱。

Oracle Database 19c當中包含的新特性眾多,我們今天向大家介紹「自動索引」。索引對大家來說都不陌生,我們創建索引是為了加速查詢,但是大家都知道,索引的維護和存儲往往是一個大問題。有時候我們為不必要的欄位創建了索引,浪費了存儲空間、付出不必要的維護成本,有時候我們因為沒有在應有索引的欄位創建索引而損失了性能。我們之前就在想,什麼時候索引的創建和刪除可以由資料庫自己來完成呢?在19c,這個功能終於實現了。今天就請您和我們一起來體驗自動索引帶給我們的方便與高效。

我們首先創建一個19c環境,今天我們使用Linux為我們的作業系統。在Linux上安裝Oracle Database 19c只需要執行3個腳本即可。您可以先觀看下方3分鐘左右的錄像,體驗一下在19c安裝的方便與快捷。

第一步:執行環境準備腳本

我們在Linux當中安裝之前版本的資料庫安裝時,也會安裝類似的安裝包,在Oracle Enterprise Linux5(以下簡稱OEL)的時候,在圖形界面中就可以選擇這個安裝包,但是在後續的OEL中,有些朋友反映找不到這個包,其實它一直都在,只不過名字會發生變更。

在安裝19c時,您可以像我一樣在線安裝(如果您的Linux可以聯網的話),您也可以來到我公司官網進行下載,我將這個預先環境準備包的rpm文件下載地址放在文末的「閱讀原文」連結中,您可以點擊「閱讀原文」進行下載。

這個安裝包將幫助大家對Linux系統進行配置,創建oracle用戶及修改系統參數等。

第二步:下載安裝包並執行安裝動作

您可以來到我公司官網下載19.3資料庫rpm包,地址如下:https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html

我將下載好的rpm放在/u01下面,然後通過root用戶使用yum的方式進行安裝,安裝大概需要5-10分鐘的時間。

安裝結束後,您將看到如下界面。

按照上面的提示,我們可以使用root用戶執行一個腳本,創建出一個示例資料庫,容器資料庫的名字是ORCLCDB,PDB的名字是ORCLPDB1,如果您不喜歡默認的資料庫配置,您可以通過修改下面紅框中的腳本對資料庫進行客制化。今天我們暫時不對配置文件做修改,直接執行。

資料庫創建的時間大概10分鐘左右,具體時間要看您的硬體環境。

當您看到如下界面,表示資料庫已經創建完畢,下圖中紅框告知您創建的資料庫信息。

為了方便操作,我們設定oracle用戶的.bash_profile,請按照如下方式進行設定。請注意,oracle用戶已經在安裝預先環境rpm的時候為大家創建好,大家從root用戶直接su - oracle就可以轉換過去。

如上圖,我們使用SQL Plus看看資料庫情況。

但是我們創建的資料庫沒有測試數據,我們接下來執行系統自帶腳本,將HR用戶創建出來,並將我們在教學時經常使用的表創建出來。請按照下圖執行腳本,並給出參數,因為參數都很簡單,提示也非常明確,這裡就不再贅述了。

至此,資料庫準備環境就完成了。

第一步:首先我們看看自動所以是否已經啟動,請按照下圖進行操作:

我們通過觀察發現「AUTO_INDEX_MODE」是OFF狀態,說明還沒有啟動自動索引功能。

第二步:啟動自動索引

我們通過DBMS_AUTO_INDEX這個Package中的存儲過程啟動自動索引。

自動索引有三種狀態:

我們可以通過執行如下語句來修改自動索引的狀態:

EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT');

EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','REPORT ONLY');

EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','OFF');

我們先將自動索引的狀態設定為IMPLEMENT,自動索引目前只在Exadata上運行的19c可以使用。


然後來到容器資料庫,設定自動索引功能。

執行腳本看看自動索引是否啟動,通過觀察發現已經啟動了。

我們來到PDB看看,首先要打開PDB,因為剛才我們將CDB重啟了,之後沒有執行PDB的open命令。

通過觀察,發現PDB上的自動索引沒有啟動。

那麼我們現在將PDB上的自動索引也啟動起來。

第三步:設定自動索引所使用的表空間

大家知道索引是需要存儲空間的。默認情況下,自動索引將使用系統默認的永久表空間作為自己的存儲空間,如果您覺得這不合適,您可以創建屬於自動索引自己的表空間。我們將/u01/dbf作為數據文件存儲的位置。

然後創建表空間

接下來,通過存儲過程設定我們剛創建好的表空間為自動索引的存儲表空間。

如果您執行了如下語句,將使用系統默認的永久表空間作為自動索引的存儲表空間。

第四步:設定schema的自動索引功能

默認情況下,所有的schemas都將被使用自動索引功能,但如果您想有針對性地啟用自動索引功能,可以通過DBMS_AUTO_INDEX.CONFIGURE這個存儲過程進行配置。我們首先看看在沒有進行特定schema配置之前的自動索引狀態。

通過觀察,在auto_index_schema當中,是空白,沒有特殊設定,表示所有的schema都啟用了自動索引。

我們現在想通過設定,只對HR這個schema啟用自動索引。

可以通過將schema設定為NULL,恢復到初始狀態,即對所有的schemas都啟用自動索引功能。

剛才設定的是:指定某些schemas使用自動索引功能,我們可以將上面的參數修改一下,指定某些schemas不使用自動索引。比如,我們創建一個schema叫做HY,讓這個schema不使用自動索引的功能。

可以通過下面的設定,清除這種「不包含」設定。

關於自動索引的其他設定,比如是否啟用壓縮、自動索引日誌保留時間等,今天就不為大家介紹了,感興趣的朋友可以參考我公司的官方網文檔:https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_AUTO_INDEX.html

第五步:驗證自動索引功能

我們在ORCLPDB1這個PDB當中的HR schema下面創建一個比較大的表,然後我們通過PL/SQL去反覆查詢這個表中的一個欄位,看看系統是否可以創建出自動索引來。

建表語句如下:

create table hr.big1 as select rownum id,t.* from dba_objects t;

然後我們通過一個PL/SQL反覆去查詢它的ID欄位:

declare

a varchar2(2000) := '';

begin

for x in 1.. 10000 loop

select object_name into a from hr.big1 where id=x;

end loop;

end;

/

您現在可以去做其他的事情,為什麼?因為自動索引的JOB是每15分鐘執行一次。所以,如果剛執行完上面的語句,馬上就去通過下面紅色框的SQL語句去查詢自動索引創建的狀態,可能看不到任何結果。請稍等一會兒,然後再去查詢。

我們在等待的時候,可以看看系統後臺是否有這樣的JOB,通過下面的查詢,我們看到有3個JOB是與自動索引有關的。


通過觀察上面的結果發現,系統自己創建了索引,名字是以SYS_AI開頭的,AI就是自動索引的意思吧。

關於更多的自動索引的信息,您可以查詢Oracle官方文檔。https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-indexes.html#GUID-D1285CD5-95C0-4E74-8F26-A02018EA7999

今天的內容就到這裡,感謝您的點閱,謝謝。

掃描下方QR Code即刻預約ADW演示

編輯:殷海英

相關焦點

  • 量子特攻自動射擊怎麼切換連發 手把手教你自動射擊怎麼切換
    量子特攻自動射擊怎麼切換連發 手把手教你自動射擊怎麼切換時間:2019-09-11 17:28   來源:九遊   責任編輯:沫朵 川北在線核心提示:原標題:量子特攻自動射擊怎麼切換連發 手把手教你自動射擊怎麼切換 《量子特攻》遊戲中,玩家開始默認的是自動射擊,不能進行連發操作,很多小夥伴就比較想知道自動射擊怎麼切換連發
  • 拼小圈自動添加好友取消圖文教程 手把手教你怎麼關閉拼小圈自動...
    拼小圈自動添加好友取消圖文教程 手把手教你怎麼關閉拼小圈自動添加好友時間:2020-06-18 15:44   來源:騰牛網    責任編輯:沫朵 川北在線核心提示:原標題:拼小圈自動添加好友取消圖文教程 手把手教你怎麼關閉拼小圈自動添加好友 拼多多拼小圈功能很多人都在使用,而我們在使用拼小圈的時候會發現每次都會推薦好友來添加
  • 微信大牛教你深入了解資料庫索引
    從這點可以看出,B-Tree是一個非常有效率的索引數據結構。另外,由於插入刪除新的數據記錄會破壞B-Tree的性質,因此在插入刪除時,需要對樹進行一個分裂、合併、轉移等操作以保持B-Tree性質。B樹與紅黑樹最大的不同在於,B樹的結點可以有許多子女,從幾個到幾千個。與紅黑樹一樣,一棵含n個結點的B樹的高度也為O(lgn),但可能比一棵紅黑樹的高度小許多,因為它的分支因子比較大。
  • 極速體驗:Oracle 18c下載和Scalable Sequence新特性
    Oracle 18c 如約已至,目前已經可以從 Oracle Edelivery 網站下載。
  • Oracle分區技術特性詳細解讀
    and global Range8i新增加希分區(hash)開始支持範圍-哈希複合分區(range-hash)8.1.7實現了動態智能裁剪(Dynamic  partition pruning)和智能連接(Partition-wise  joins)9iR1新增列表分區(list)開始支持全局索引維護
  • 乾貨分享丨Java開發穩步進階之不容忽視的「索引」
    覆蓋索引不僅僅只包含你寫在WHERE條件內的欄位,而且還包含所有SELECT 需要的欄位,以及在GROUP BY 或ORDER BY 子句內的欄位。那麼我可以怎麼通過覆蓋索引來優化我們的sql呢?'2' select * from ryc where a = '3'這些情況搜索不影響查詢結果,它們都是從最左邊開始,同時因為Mysql中有查詢優化器,會自動優化查詢順序。
  • 數據科學 | 手把手教你用 pandas 索引、匯總和處理缺失數據
    insert:將元素插入到索引a處,並得到新的Index ● unique:計算Index中唯一的數組首先建立一個Series對象,這裡直接對index賦值。這裡用來判斷列和索引是否在DataFrame中存在。有時我們需要重新對pandas對象進行索引賦值。 ● Series的reindex將創建一個適應新索引的新對象並根據新索引進行重排。當某個索引值不存在時,引入缺失值進行填充。 ● 對於序列數據(如有時間標籤的數據),重新索引時可能需要做一些插值處理。其中可以用method選項即可達到此目的。
  • 英國留學申請材料準備攻略 索引留學OfferMachine鳥叔手把手教你
  • 手把手教你怎麼操作
    來源:中新經緯打工人注意了,2021年度個稅專項附加扣除開始確認了。按照規定,每年12月份要對次年享受專項附加扣除的內容進行確認,確認後,才可在扣除年度生效。怎麼操作?中新經緯記者手把手來教你→ 打工人注意了,2021年度個稅專項附加扣除開始確認了。按照規定,每年12月份要對次年享受專項附加扣除的內容進行確認,確認後,才可在扣除年度生效。怎麼操作?中新經緯記者手把手來教你→ 打工人注意了,2021年度個稅專項附加扣除開始確認了。
  • Mysql索引:圖文並茂,深入探究索引的原理和使用
    ,你能說出多少乾貨呢?B+樹的葉子節點上有指針進行相連,因此在做數據遍歷的時候,只需要對葉子節點進行遍歷即可,這個特性使得B+樹非常適合做範圍查詢。1.2 聚簇索引與非聚簇索引首先,為了方便理解,我們先了解一下聚集索引(clustered index)和非聚集索引(secondary index,也稱輔助索引或普通索引)。這兩種索引是按存儲方式進行區分的。
  • 從Oracle到PostgreSQL:Storage Index 特性 vs BRIN 索引
    同樣的思路,在一個類索引結構中存儲一定範圍的數據塊中某個列的最小和最大值,當查詢語句中包含該列的過濾條件時,就會自動忽略那些肯定不包含符合條件的列值的數據塊,從而減少IO讀取量,提升查詢速度。以下借用Pg wiki中的例子解釋BRIN indexes的強大。
  • 索引很難麼?帶你從頭到尾捋一遍 MySQL 索引結構!
    答案是否定的,因為在書的前面,存在目錄,它會告訴你這一節在哪一頁,例如,第一節在第1頁、第二節在第13頁。在資料庫的頁中,實際上也使用了這種目錄的結構,這就是頁目錄。那麼引入頁目錄之後,我們所理解的頁結構,就變成了這樣:
  • Oracle 聯合索引 vs 多個單列索引
    (這段時間陸續給大家整理和分享一些面試題,題目大都也跟實際項目密切相關)面試官:資料庫在對多個欄位建索引的時候,建聯合索引 和 多個列索引應該怎麼選擇?候選人:..直接上測試,看結論的直接到文末查看。環境準備資料庫oracle 19c100萬條隨機數據一、單列索引(多個)建表 (多個單列索引測試):CREATE TABLE "TEST"."
  • MySQL 8.0 新特性之Hash Join
    上周在公司做了針對MySQL 8.0新特性相關的分享,提到MySQL 8.0新特性,不得不提到的就是HashJoin,MySQL一直被人詬病沒有實現
  • 數據分析索引總結(下)Pandas索引技巧
    ]).head()2. reindex和reindex_likereindex是指重新索引,它的重要特性在於索引對齊,很多時候用於重新排序。使用表內列作為索引:將df的列設置為索引, 參數 drop 默認丟棄原來的索引。df.set_index('Class').head()利用append參數可以將當前索引維持不變這種情況下會把新的索引作為次級索引。
  • 下載 | 《手把手教你學51單片機-C語言版》
    編輯推薦《手把手教你學51單片機(C語言版)》的創作,目的就是改變當前「51單片機」教學與自學的模式:國內首創「手把手教你學」——集理論知識、視頻教程可以預見,《手把手教你學51單片機(C語言版)》將引領一場單片機教學的革命!作者簡介宋雪松 ,國內知名單片機培訓專家,嵌入式產品技術顧問。擁有近十年產品研發經驗,曾主持研發通信類、虛擬儀器等多款產品,在硬體電路設計和嵌入式軟體設計方向有豐富的項目實戰經驗。
  • MySQL中的索引原理與索引分類
    (2)繼續插入H,n > 4,中間元素G字母向上分裂到新的節點;假設現在有三個欄位建立了複合索引CREATE INDEX idx_a_b_c ON demo_table(a, b, c);那麼但你的where條件是a、a、b或者啊a、b、c時,都可以命中索引,除此之外都不能命中索引,例如:a、c或者b、c等;當然有一個例外,當你 select 的欄位裡有複合索引裡的欄位,那麼where語句不需要滿足最左前綴匹配,MySQL 也會走索引
  • 索引很難麼?帶你從頭到尾捋一遍MySQL索引結構,不信你學不會!
    答案是否定的,因為在書的前面,存在目錄,它會告訴你這一節在哪一頁,例如,第一節在第1頁、第二節在第13頁。在資料庫的頁中,實際上也使用了這種目錄的結構,這就是頁目錄。那麼引入頁目錄之後,我們所理解的頁結構,就變成了這樣:
  • 實戰|手把手教你用Python爬取存儲數據,還能自動在Excel中可視化
    來源 | 早起Python大家好,在之前我們講過如何用Python構建一個帶有GUI的爬蟲小程序,很多本文將迎合熱點,延續上次的NBA爬蟲GUI,探討如何爬取虎撲NBA官網數據,並且將數據寫入Excel中同時自動生成折線圖,主要有以下幾個步驟:本文將分為以下兩個部分進行講解:
  • 圖解MySQL索引:如何正確使用索引?
    MySQL中有個很重要的規則,即最左匹配原則用來定義組合索引的命中規則,它是指在檢索數據時從聯合索引的最左邊開始匹配。假設對用戶表建立一個聯合索引(a,b,c),那麼條件a,(a,b),(a,b,c)都會用到索引。