1. 程式人生 > >Oracle一些概念重溫

Oracle一些概念重溫

14. ogr cond then fault result idt mys 匹配

當前項目數據庫用的Oracle。鑒於已經有幾年沒有接觸過Oracle了,故在此重新溫習一下oracle的部分概念和特性。

1.Oracle體系結構圖

      技術分享圖片

2.Oracle物理結構由三類文件組成,數據文件,控制文件和重做日誌文件;參數文件、密碼文件和歸檔日誌文件不屬於Oracle的數據庫文件,但也是運行Oracle必不可少的。

3.Oracle提供了三種數據庫連接方式:

  基於主機的方式

  基於客戶機-服務器的方式

  客戶-應用服務器-數據庫服務器方式。應用服務器包括 IIS或Apache服務器

  通過這三種方式可以建立一個數據庫連接(connection),一個連接可以並發建立多個會話(session)

4.Oracle的內存結構由兩大部分:SGA(System Global Area)和PGA(Progress Global Area)構成。從體系結構圖中可以形象看出。SGA包含幾個重要的內存區:數據庫高速緩存(Database buffer cache)、重做日誌緩存(Redo log buffer cache)、共享池(Shared pool)、大池(Large pool)和Java池(Java pool)

5.Oracle的進程分為服務器進程和用戶進程。服務器進程中有5個必須的,DBWR(數據庫寫進程)、LGWR(重做日誌寫進程)、PMON(進程監控進程)、SMON(系統監控進程)、CKPT(檢驗點進程)

6.一些支持的簡單的sql函數

-- || 做字符拼接
select a || b    as test from dual 
-- concat做字符拼接
select CONCAT(a, b) from dual;
-- lower轉小寫
select lower(A) from dual;
-- upper轉大寫
select upper(b) from dual;
--initcap把段首和空格後的第一個字符轉大寫
select INITCAP(anyWord test) from dual;
--substr截取字符
select SUBSTR(any word test
, 0, 3) from dual; --length統計字符長度 select LENGTH(中1a-) from dual; --instr查找字符出現的位置 select INSTR(abc, f) from dual; --trim清空段首和段尾多余的空格 select TRIM( a b c ) from dual; --replace替換字符 select REPLACE(abcd,bc, any word ) from dual; --round按特定精度四舍五入 select round(0.333333,3) from dual; --trunc按特定精度截取 select trunc(0.3355,3) from dual; --sysdate查詢當前時間 select SYSDATE from dual; --nvl判空並返回指定結果 select nvl(BOX_WIDTH,rownum) from WWV_FLOWS where BOX_WIDTH is null; --nvl2判空,按是否返回不同結果 select nvl2(box_width,box_width,rownum) from WWV_FLOWS; -- case when.. end 做條件查詢 select (case when flow.id <= 4400 then less than 4400 when flow.id = 4500 then is 4500 else bigger than 4500 end ),flow.ALIAS from WWV_FLOWS flow; -- decode(str,condtion1,result1...,default)做條件查詢 select DECODE(flow.id, 4400,is 4400,4500, is 4500, other) from WWV_FLOWS flow; --rownum查詢 select fow.rowid,rownum,fow.ALIAS from WWV_FLOWS fow; --having和group by的語法組合 select SUBSTR(flow.name, 0, 4) from WWV_FLOWS flow having SUBSTR(flow.name, 0, 4) like %PE% group by SUBSTR(flow.name, 0, 4) ;

7.數據字典,包含有

  所有模式(用戶)對象的定義

  數據庫的邏輯結構和物理結構信息

  所有模式對象唄分配多少存儲空間以及當前使用的空間

  默認列的值

  對象完整性的約束信息

  用戶信息

  用戶或角色的特權信息

  審計信息

8.數據字典試圖分3類,DBA_*,ALL_*,USER_*

9.管理和維護表

  臨時表的概念(寫存儲過程中可能會涉及)

  表空間、段空間、區、塊的概念

  高水準線、行遷移的概念

  一類特殊表:索引組織表

10.索引

  索引的特點:

  對於具有只讀特性或較少插入、更新或刪除操作的大表通常可以提高查詢速度

  可以對表的一列或多列建立索引

  建立索引的數量沒有限制

  索引需要磁盤存儲,需要Oracle自己維護

  索引對用戶透明,是否使用索引是Oracle決定的

11.Oracle的RDBMS在訪問數據時最根本的3種訪問方式:全表掃描,通過ROWID,使用索引

12.索引掃描類型包括

  INDEX UNIQUE SCAN(索引唯一掃描)

  INDEX RANGE SCAN(索引範圍掃描)

  INDEX FULL SCAN(索引全掃描)

  INDEX FAST FULL SCAN(索引快速掃描)

13.限制使用索引的一些情況

  where條件中使用不等於運算符(包括 <>、!=)

  使用is null 或 is not null (貌似不會影響到位圖索引)

  使用函數(可以建立函數索引來規避這種情況)

  使用不匹配的數據類型

14.優化器基於 選擇性、集群因子兩個關鍵因素來決定是否要所用索引

15.索引查找分為兩個過程:

  根據樹進行定位、找出rowid(索引查找)

  根據rowid找出表中的數據行(表數據查找)

16.直方圖的概念

17.Oralce默認采用B樹索引

18.hash索引、反向鍵索引、基於函數的索引

19.監控索引的使用

20.重建、維護和刪除索引

21.純粹做開發還可能牽扯到 事務、sql調優的概念。數據庫層級除非寫存儲過程,一般牽扯到這一層的事務較少(大部分都是在上層做事務管控)。oracle的sql優化的話,簡單的方式就是基於解釋器來做,這一點上,用oracle比用mysql好太多了。

18位圖索引為一種可選索引,但是對於有大量更新操作的表最好不選擇使用位圖索引

Oracle一些概念重溫