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