Oracle與Mysql應(yīng)用總結(jié)
導(dǎo)讀:在以前開發(fā)的時(shí)候,一直在使用oracle,甚至參加過oracle的培訓(xùn),考過Oracle Database 10g Administrator I,自認(rèn)對(duì)oracle還算有些了解,不過最近在做一個(gè)分布式數(shù)據(jù)系統(tǒng)的測(cè)試的時(shí)候,才有“學(xué)到用時(shí)方恨少”的感悟。Oracle與Mysql的應(yīng)用是怎樣的呢?在此把最近總結(jié)的一些東西陸續(xù)跟測(cè)試 部的同學(xué)們一起分享吧。
1. in如何與list綁定:
一個(gè)帶in子查詢的語句相信對(duì)很多人來說都是司空見慣了的,例如:「select * from normaltbl_ora where pk in (1,2,3,4)」、「select * from normaltbl_ora where name in (“manhong”,”yihuan”,”gongyangyu”,”yaolingling”) 」。但是如果in的查詢字段上沒有建立索引或者無法通過索引查詢,那數(shù)據(jù)庫(kù)會(huì)將該字段與in里面的每個(gè)值都進(jìn)行比較運(yùn)算,如果記錄數(shù)有成千上萬條甚至以 上,會(huì)明顯感覺到SQL的CPU開銷過大甚至難以負(fù)荷,過量的使用這樣的語句,將引起數(shù)據(jù)庫(kù)的大量硬解析與共享池的SQL碎片。所以,在實(shí)際的應(yīng)用過程 中,我們則可以采用list的方式將這些in字段綁定起來。接下來具體描述如何創(chuàng)建in與list綁定,以及如何去使用它們。
a. 創(chuàng)建數(shù)據(jù)類型
數(shù)值列表數(shù)據(jù)類型
字符串列表數(shù)據(jù)類型
b. 創(chuàng)建相關(guān)函數(shù)
數(shù)值列表函數(shù)
字符串列表函數(shù)
c. 查詢
通過數(shù)值列表函數(shù)查詢
通過字符串列表函數(shù)查詢
2. 關(guān)于Hint的使用:
在做分布式數(shù)據(jù)系統(tǒng)測(cè)試的時(shí)候,發(fā)現(xiàn)它們有一個(gè)非常關(guān)鍵的技術(shù)點(diǎn)是生成sql的執(zhí)行計(jì)劃。而Hint就是這樣的一種機(jī)制,用來告訴優(yōu)化器按照我們的 告訴它的方式生成執(zhí)行計(jì)劃。Hint可以基于表連接的順序、表連接的方法、訪問路徑、并行度等規(guī)則對(duì)dml語句、或者查查詢語句產(chǎn)生作用,通過它我們可以 實(shí)現(xiàn):
1) 使用的優(yōu)化器的類型
2) 基于代價(jià)的優(yōu)化器的優(yōu)化目標(biāo),是all_rows還是first_rows。
3) 表的訪問路徑,是全表掃描,還是索引掃描,還是直接利用rowid。
4) 表之間的連接類型
5) 表之間的連接順序
6) 語句的并行程度
a. Hint語法:
/* */常寫代碼但較少接觸Hint的同學(xué)們可千萬別誤認(rèn)為這只是代碼的簡(jiǎn)單注釋。
舉幾個(gè)簡(jiǎn)單的應(yīng)用例子:
i. 盡快地顯示前5行記錄
ii. 再比如說大數(shù)據(jù)量、分庫(kù)分表查詢中比較常用到的并行查詢操作
試驗(yàn)的時(shí)候雖然數(shù)據(jù)量不大,但是效果倒是還挺明顯的,速度之間比對(duì)接近于1:2。像淘寶這種大數(shù)據(jù)量應(yīng)用,每張數(shù)據(jù)表都有過千萬甚至過億數(shù)據(jù)的時(shí) 候,使用parallel Hint效果會(huì)非常明顯,當(dāng)然數(shù)據(jù)庫(kù)主機(jī)的CPU的核數(shù)越多,系統(tǒng)當(dāng)前負(fù)載越低的時(shí)候,parallel Hint的優(yōu)勢(shì)將會(huì)越加明顯。
關(guān)于Hint的使用,要盡可的自身去體會(huì)才能真正理解其作用,在遇到使用Hint的地方大家可以多關(guān)注一下,有時(shí)間也可以自己做一些調(diào)查驗(yàn)證。
【編輯推薦】