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