Oracle一些概念重溫
當前項目數據庫用的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一些概念重溫