數(shù)據(jù)庫的功能就是組織管理和存儲各種數(shù)據(jù)庫對象。數(shù)據(jù)庫中的對象是我們進(jìn)行數(shù)據(jù)管理的基本。本篇會回顧一下數(shù)據(jù)庫對象的一些基本知識,讓我們更加清晰的了解這些Oracle數(shù)據(jù)庫對象。
1. 表(Table)
我們操作數(shù)據(jù)庫的時候,大部分都是操作表來完成的。表是一個邏輯概念,是數(shù)據(jù)庫組織管理數(shù)據(jù)的基本單位。
表可以分為關(guān)系表和對象表。關(guān)系表包含堆表、索引組織表、外部表。我們常用的為堆表。
堆表對應(yīng)的段是以堆的結(jié)構(gòu)形式存儲的,存儲的數(shù)據(jù)邏輯上市無序的。
表與段(Segment)對應(yīng)的關(guān)系如下
- 對于非分區(qū)表,一個表對應(yīng)一個段;
- 對于分區(qū)表,一個分區(qū)對應(yīng)一個段;
- 對于有子分區(qū)的表,一個子分區(qū)對應(yīng)一個段;
其他的數(shù)據(jù)庫對象與此類似
1.1 表分區(qū)
表分區(qū)(Partition),就是根據(jù)用戶的數(shù)據(jù)情況和業(yè)務(wù)需求,將表中的數(shù)據(jù)由一個段中變?yōu)槎鄠€段存儲,以方便對用戶數(shù)據(jù)的管理和維護(hù),提升查詢操作的性能。當(dāng)然也有一些缺點(diǎn),使用不當(dāng)?shù)脑挄霈F(xiàn)一些性能問題;應(yīng)用分區(qū)表需要有更多的經(jīng)驗(yàn),更全面的考量,這也對開發(fā)者提出了更高的要求。
何時應(yīng)用分區(qū):
- 首先需要考慮的是數(shù)據(jù)量,足夠大的數(shù)據(jù)量才有分區(qū)的必要,少量數(shù)據(jù)根本沒必要進(jìn)行分區(qū)。Oracle官方推薦,表所占的存儲空間超過2GB時,可以考慮對表進(jìn)行分區(qū)。一般來說盡量避免分區(qū),需要分區(qū)一定要有充分的理由。
- 如果當(dāng)前非分區(qū)的表已經(jīng)影響到了用戶對數(shù)據(jù)的管理和維護(hù),可以考慮分區(qū)。
- 分區(qū)之后是否能提高用戶的查詢及操作性能。
關(guān)于如何分區(qū),我們后面的文章在繼續(xù)分析。
2. 索引(Index)
索引是建立在表上的邏輯對象。索引可以提高表數(shù)據(jù)的訪問查詢效率,對性能優(yōu)化有著非常大的作用。索引也是和一個或者多個段相關(guān)聯(lián),索引最終存儲的位置也是段。不同類型的索引有不同的存儲邏輯結(jié)構(gòu),如B樹,Bitmap(位圖)等。
索引是表的可選項,創(chuàng)建適當(dāng)?shù)乃饕菙?shù)據(jù)庫優(yōu)化的重中之重。然而索引可以提高查詢效率,同時也會降低DML操作的效率,兩者綜合考慮后才會有比較好的性能。
關(guān)于索引的數(shù)據(jù)庫優(yōu)化方案,大多是避免索引失效,優(yōu)化索引使用順序等。B*樹索引,位圖索引等索引會在后面的文章中具體去說一下。
3. 簇(Cluster)
簇是一個包含一個或多個表數(shù)據(jù)的數(shù)據(jù)庫對象,其中被包含的表中都會具有共同的一列或者多列,這些列稱為簇鍵列。
創(chuàng)建簇需要相應(yīng)的權(quán)限,開發(fā)中使用不多。簇可以分為索引簇和哈希簇,區(qū)別就是查找數(shù)據(jù)的時候前者通過簇鍵列上的索引,后者使用簇鍵列的哈希值。根據(jù)使用場景來確定來使用那種類型。
4.視圖(View) & 物化視圖(Materialized View)
視圖是一種虛定義的邏輯對象,主要用來簡化業(yè)務(wù)邏輯、方便開發(fā)維護(hù),視圖并不包含任何數(shù)據(jù),其數(shù)據(jù)基于視圖對應(yīng)的其他對象。
視圖可以提供一些增刪改查的操作,同時有一定的安全性,可以屏蔽一些列,使用起來也比較靈活。但對于性能會有一些影響。
物化視圖,相對于視圖而言,物化視圖可以實(shí)際存儲數(shù)據(jù),和表一樣對應(yīng)相關(guān)的段。
物化視圖可以用來匯總,計算等業(yè)務(wù)。同時也可以在一定條件下進(jìn)行增刪改查,并且也可以建立索引等。
5. 同義詞(Synonym)
同義詞也是虛的一個邏輯對象,不會存儲任何數(shù)據(jù)。本質(zhì)上算是其他數(shù)據(jù)對象的一個別名。同時可以將同義詞的權(quán)限分配給不同的用戶,作為安全管理的一種方式。
6. 序列(Sequence)
序列不存儲任何數(shù)據(jù),用戶可以通過序列獲取一系列有序的數(shù)值。
定義序列的時候可以定義序列名,升降序,步長等。如果負(fù)載并發(fā)很高的情況下,序列的增長會影響整體的性能。
7. 過程(Procedure) & 函數(shù)(Function)
過程和函數(shù)都是虛邏輯對象,不存儲數(shù)據(jù)。主要功能就是使用數(shù)據(jù)庫編碼的調(diào)用來執(zhí)行一系列任務(wù)。
過程和函數(shù)都是數(shù)據(jù)庫中的對象,有一組SQL或者一些其他的PL語句組成。為解決特定問題而編寫的一單元。
不同的是函數(shù)有一個返回值,除此之位,過程和函數(shù)在其他方面均相同。
8.觸發(fā)器(Trigger)
觸發(fā)器也是數(shù)據(jù)庫的一個邏輯對象,不存儲數(shù)據(jù)。主要是通過數(shù)據(jù)庫編碼,在事件自動觸發(fā)的時候執(zhí)行一組命令。
其執(zhí)行過程是自動的,當(dāng)某一個事件觸發(fā)相關(guān)條件后,則會執(zhí)行。
9. 約束(Constraint)
約束是數(shù)據(jù)庫中的邏輯對象,其功能是通過一些內(nèi)部或者自動逸邏輯來實(shí)現(xiàn)對數(shù)據(jù)的檢查和限制,使其符合某種規(guī)則或者標(biāo)準(zhǔn)。從而實(shí)現(xiàn)數(shù)據(jù)的規(guī)則化,標(biāo)準(zhǔn)化。
常見的約束有
- 主鍵約束
- 唯一約束
- 非空約束
- 外鍵約束
- 自定義約束(檢查約束)
總結(jié)
Oracle的基本對象在開發(fā)中使用比較頻繁,我們經(jīng)常會使用到這些對象。每一種對象其背后都有復(fù)雜的工作原理以及使用技巧,這里先簡單介紹這些常用對象,后面再結(jié)合實(shí)際應(yīng)用來說了其在開發(fā)優(yōu)化中的應(yīng)用。
-
存儲
+關(guān)注
關(guān)注
13文章
4226瀏覽量
85575 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3752瀏覽量
64233 -
Oracle
+關(guān)注
關(guān)注
2文章
286瀏覽量
35086
發(fā)布評論請先 登錄
相關(guān)推薦
評論