1. 程式人生 > >分割槽表刪除分割槽對索引的影響(Oracle分割槽表刪除分割槽資料時導致索引失效解決)

分割槽表刪除分割槽對索引的影響(Oracle分割槽表刪除分割槽資料時導致索引失效解決)

http://www.itpub.net/thread-1942951-1-1.html

oracle中,建立分割槽表,然後建立索引的時候有全域性索引和本地索引,
因為需要定時刪除分割槽,所以建立本地索引,可以在查詢的時候走索引,
那麼全域性索引的意義是什麼?
據說全域性索引會快,什麼樣的查詢用全域性索引
會達到快的效果?
而且全域性索引維護起來比較麻煩,刪除分割槽會讓索引失效,
失效的原因是什麼?

同時還有個問題

因為我同時也在使用mysql資料庫,在mysql資料庫裡面,好像沒有全域性索引和
本地索引的區別,按照正常的create index 不加global或者local,生成的索引,
在刪除分割槽的時候沒有失效的現象。是不是代表就是local本地索引?



而在oracle中直接用create index 不加global或者local  好像生成的就是全域性索引。

麻煩各位大神為我解惑~謝謝!~!

===================================================================

那麼全域性索引的意義是什麼?
據說全域性索引會快,什麼樣的查詢用全域性索引
會達到快的效果?

如果你的查詢條件中不包含分割槽鍵,那麼用全域性索引比區域性索引快。區域性的相當於要多次查詢,每次查一個小一點的索引。

失效的原因是什麼?
因為同一個分割槽的索引條目,在全域性索引檔案中並不是在一起的,而是分散的。分割槽可以整個刪除,索引沒法把整塊資料拿掉。



mysql問題請去相應板塊。

================================================================

用一個例子來說明吧:
假設有一個訂單明細表,有訂單生成時間,訂單號,產品ID和使用者ID。且這個訂單明細表是按訂單生成時間按月分割槽的。
如果有一個需求是查詢2015年3月,某個產品被訂購的數量。那麼我們可以在訂單生成時間和產品ID列上建一個組合索引,並建成本地索引更好。因為這樣可以進行分割槽消除,只在3月資料所對應的索引中去查詢,處理的範圍小,效率高。
如果有一個需求是查詢某個使用者歷史上訂購某個產品的次數,那麼在產品ID列和使用者ID列上建立一個全域性索引更好。反之,如果在產品ID列和使用者ID列上建立一個本地索引,由於不能使用上分割槽消除,其訪問效率會低於全域性索引。而且,為了進一步提升前面全域性索引的效能,我們還可以對這個全域性索引按產品ID(產品ID的唯一值相對較少)進行分割槽,這樣,訪問這個全域性索引時會更有效率。



所以,全域性索引快,還是本地索引快,要結合特定的SQL,不同的SQL,兩種索引的表現是不同的。

索引是由記錄的ROWID和索引列值組成的。而ROWID又是由物件號、檔案號、塊號和行號組成的。當我們對分割槽做管理操作時(比如刪除分割槽、合併分割槽、分割分割槽等),相應分割槽的物件號均會改變,再加上這些操作是DDL操作。如果不失效全域性索引,若某個SQL的訪問路徑是按索引訪問,那麼就極可能得到錯誤的結果。而本地索引,由於是和指定分割槽獨立關聯的,大部分的分割槽管理操作,它是可以同步做對應的索引的DDL操作的。但是,在做分割槽操作時,加上”update indexes"選項,全域性索引會進行相應的更新和維護操作,這樣全域性索引也不會失效,但操作的時間會相應變長。所以,本地索引的管理成本更優。

================================================================

現有一分割槽表,除主鍵索引外其餘索引均為分割槽索引,疑問如下:
1、現在有dba指出修改計劃將表主鍵的全域性索引修改為分割槽索引,不知道修改後能不能夠起到優化的作用??
2、分割槽索引對主鍵中的資料一致性有沒有影響??
3、在不影響生產庫的情況下怎樣將全域性主鍵索引修改為分割槽索引??
  按照我的理解答的,不全對啊。謝謝
答1,分割槽表在管理上的確非常方便,在效能方面的表現也不錯。
但是就是有一點不是很理想:刪除分割槽和TRUNCATE分割槽表中資料,會造成主鍵和全域性索引的失效。如果資料表非常大,索引的重建也是需要花很長時間的。
所以:首先根據應用盡量將索引修改為分割槽索引(個別索引可能不能修改),刪除主鍵也修改為唯一分割槽索引。
經過測試表明,如果分割槽欄位選擇合理,使用分割槽索引的效率比全域性索引要高一些,而主鍵和唯一分割槽索引的效率大體相當,因此這樣的優化還是非常值得的,如果由於優化導致個別應用效率下降,也可以通過應用的調整進行優化。

答2:主鍵如果不是你選擇的分割槽欄位的話, 在分割槽表上建立的唯一索引必須包含分割槽欄位,否則會提示錯誤(ORA-14039),這一點也需要特別注意。

答3:刪除索引,建立所以,具體sql,google
注:主鍵索引和主鍵約束的建立與刪除順序 
建立主鍵索引 --> 建立主鍵約束 
刪除主鍵約束 --> 刪除主鍵索引 


注: 
1.分割槽欄位不是主鍵的情況下,只可以建立全域性分割槽索引,不可以建立本地主鍵分割槽索引. 
只有分割槽欄位為主鍵時才可以建立本地主鍵分割槽索引. 
2.如果建立本地唯一分割槽索引,除指定索引欄位外還要加上表分割槽欄位. 
這種索引意義不大:因為這樣構成複合索引,索引改變,約束也改變了. 
3.如果建立非唯一索引則不需要表分割槽欄位. 
4.建立全域性分割槽索引後可以建立約束.  

================================================================

一般都是local 的。不然後續一維護分割槽,索引就失效了。

還得從新維護索引。

可以把分割槽建也作為主鍵。

主鍵就用全域性吧,刪除分割槽的時候加上update global indexes就可以了,執行很快的。

相關推薦

分割槽刪除分割槽索引影響(Oracle分割槽刪除分割槽資料導致索引失效解決)

http://www.itpub.net/thread-1942951-1-1.html在oracle中,建立分割槽表,然後建立索引的時候有全域性索引和本地索引,因為需要定時刪除分割槽,所以建立本地索引,可以在查詢的時候走索引,那麼全域性索引的意義是什麼?據說全域性索引會快,

Oracle分割槽刪除分割槽資料導致索引失效解決

一、描述      今天有個小任務就是要刪除些資料,哈哈,先自己小開心一下。因為要刪除的資料表是我之前轉換成的分割槽表。這個分割槽表是按照裡面有個建立時間欄位來分割槽的,1個季度為1個分割槽。所以我現在要將2017年7月1日之前的資料刪除(資料量約1000萬),可以直接刪除表

solr,lucene全文索引原理、結構/非結構化資料、反向索引等詳細描述

這篇博文寫的太好了,首先十分感謝博主,這裡請允許我轉載。 先說下讀音,solr發音同 solar ['səulə]----餿了;:  lucene:[lu:sən]魯森  Solr是一個獨立的企業級搜尋應用伺服器,它對外提供類似於Web-service的API介面。使

oracle 12c誤刪pdb資料檔案導致整個資料庫無法開啟問題

同事誤刪了某個外掛資料庫(PDB)的資料檔案,結果整個資料庫,包括容器資料庫(CDB),以及其他外掛資料庫都用不了了。 1、用sys賬號進入例項,可見容器資料庫處於mounted狀態;插在上面的所有PDB當然也都是mounted。 sqlplus sys/p

Oracle 11g分割槽索引分割槽(《Oracle從入門到精通》讀書筆記4)

一、概述 分割槽表的用途和優點: 1. 降低故障引起的損失; 2. 均衡I/O,減少競爭; 3. 提高查詢速度,這一點在資料倉庫的TP查詢特別有用; *TP查詢:Transaction Processing,事務處理查詢?這點不太清楚、網上資料也少,沒查到 二、建立表分

SqlServer 選項LOCK_ESCALATION分割槽影響

SqlServer 使用鎖管理器跟蹤資料庫物件是否被鎖住.通常一個查詢將鎖住一行或者一頁,當鎖超過一定範圍之後,SqlServer嘗試將鎖升級為表鎖來保證對記憶體的使用.鎖升級有時會導致堵塞或者死鎖.在SQL Server profiler中我們可以用[Lock:Esca

Oracle建立分割槽----範圍分割槽

建立分割槽是資料庫優化的一種手段,範圍分割槽是表分割槽的一種。      建立範圍分割槽的關鍵字是"RANGE",建立該分割槽後,其中的資料可以根據分割槽鍵值指定的範圍進行分佈,當資料在範圍內均勻分佈時,效能最好。 例如我們選擇一個日期作為分割槽鍵,分割槽“AUG-201

oracle資料庫空間,使用者許可權,分割槽建立基礎知識(一

--sys管理員使用者登入  conn sys/222818 as sysdba alter user Libaobao account lock;--解鎖新建使用者 alter user Libaobao account unlock; --鎖定新建使用者 --刪除該新建使用者 drop user

Oracle普通修改為分割槽的方法

資料庫版本是9.2.0.6 需要將幾個1T左右的普通表變更為分割槽表. 嘗試過下面三種方法: 1.先建立空的分割槽表,然後將原表中的資料insert進去; 2.使用Oracle的線上重定義工具 3.CTAS方法. 執行辦法,比較: 第一種方法:先建立空的分割槽表,然後將原

oracle 建立分割槽

CREAT TABLE TABLE1 ( GPS_DATE DATE, ) PARTITION BY RANGE(GPS_DATE) INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) ( PARTITION P1 VALUES LESS T

現有Hive的大進行動態分割槽

分割槽是在處理大型事實表時常用的方法。分割槽的好處在於縮小查詢掃描範圍,從而提高速度。分割槽分為兩種:靜態分割槽static partition和動態分割槽dynamic partition。靜態分割槽和動態分割槽的區別在於匯入資料時,是手動輸入分割槽名稱,還是通過資料來判斷資料分割槽。對於大資料批量匯入

Oracle建立分割槽

直接進入主題----可以這樣理解,當一個數據表在插入資料的時候,在幾百條或者幾千條資料中查詢目標資料的時候不會花費多長時間,最多一兩秒!但是隨著資料的不斷增加,當達到上萬條或者幾百萬條的時候,當你在查詢某個資料,這是可能會花費幾分鐘,甚至會導致系統掛掉!這個時候就需要考慮分

ORACLE 建立和使用分割槽

  create table guestbook(  id number(16) primary key,  username varchar2(64),  sex varchar2(2),  email varchar2(256),  expression varchar2(128),  content v

oracle drop、truncate 分割槽分割槽注意

由於客戶某表月初通過ogg匯入資料較多,ogg未能完成。因此決定使用資料泵臨時匯入。 停止ogg,刪除表分割槽資料。通過delete加條件篩選資料,發現數據量較大,嘗試刪除,執行很長時間後,undo不夠用報錯。 決定,truancate該分割槽。查看錶的分割槽,發現存

oracle下正確刪除空間的方法

oracle tablespace Oracle因為本身的多重驗證機制所有在刪除表空間時不像MySQL中刪除database一樣,可以通過外部的刪除直接刪除掉database文件夾就可以刪除掉database,當然這兩者是2種不同的東西,在此僅用於舉例說明。在Oracle中表空間相當於系統中的硬

測試創建變量IO的影響

占用空間 .cn pre cati 次數 oca .com art 代碼 測試創建表變量前後,tempdb的空間大小,目前使用sp_spaceused得到大小,也可以使用視圖sys.dm_db_file_space_usage use tempdb go Se

oracle批量刪除某個用戶下的所有

devel all 查詢 sele rom 所有 log where 刪除 打開sql developer,輸入如下語句,把USERNAME替換為需要刪除的的用戶名 SELECT ‘DROP table ‘||table_name||‘;‘ FROM all_tab

Oracle Drop並未直接刪除 drop table xx purge

locate 清除 執行 keep storage 取消 ack 語句 acl drop表 執行drop table xx 語句 drop後的表被放在回收站(user_recyclebin)裏,而不是直接刪除掉。這樣,回收站裏的表信息就可以被恢復,或徹底清除。

oracle刪除數據後,回收空間的問題

轉載 get 分數 數據 utm wid 除了 cascade 減少 轉載一篇文章,關於Oracle數據庫表刪除數據後,釋放空間的問題,原文地址:https://blog.csdn.net/lenovouser/article/details/53422773,內容如下:

關於oracle中直接刪除空間所引發的問題

場景描述:今天在匯入oracle時提示表空間A存在,按照以前的慘痛經歷,將oracle的各個部分停滯,然後直接在資料夾裡右鍵刪除(這裡這樣做應該是沒有問題的,因為原來出過這樣的問題,所以這種暴力刪除的時候一定要將oracle中的東西都停止),但是這次直接就出問題了,提示,OR