戰爭的開始:系統從開發環境到生產環節
戰術與戰略:戰略是大局上把握整體sql架構,戰術是局部的sql。
戰略第一部分:
高效訪問數據庫的程序的關鍵目標
1,查詢的識別
在程序中加入sql語言的識別,
/*查詢今天出差的合同工的人員*/ select **********
orcale包含的registration faclities實現啦對注釋的簡化
2,數據庫鏈接的穩定性
數據庫鏈接會帶來巨大的開銷,
一個1000行的sql語言,發生以下3種操作
a. 鏈接一次,一個行操作
b. 鏈接一次,所有行操作
c.鏈接一次,100行為一個數組進行操作
操作時間a>>b>>c
原因:數據庫的鏈接是重復操作,線程,sesssion,跟蹤,dbms的檢驗等。
程序與數據庫之間的交互
3,戰略優先與戰術
戰略決定展示,高屋建瓴。
4,先定義問題,再解決問題
所有的技術。方案都是我們為了達到目標的手段,,新技術固然很迷人,
但是不要把新的技術作為目標,擺弄新工具之前,先學好手藝。
5,保持數據庫模式的穩定
不要在程序中使用ddl語言,建立,修改,刪除數據庫對象。
ddl核心是數據字典,數據字典是所有數據庫操作的核心,所以對ddl的操作會引起全局加鎖
6,臨時表與永久表,
一般使用永久表,臨時表的使用減低優化性能。
7,使用sql處理集合
sql語言是基于集合(set)處理數據的,如果不是從整個表進行操作,必須對處理的set
進行粒度的定義,或許是大量數據粗粒度,或許是小量數據細粒度
將大批的數據處理分割為許多的小的數據處理是個壞注意。
如:幾千個數據,使用游標很慢,換成幾個語句,雖然快不了多少,但總是推薦這樣做
8,動作豐富的sql語言
sql不是過程語言,請區別聲明處理與過程處理的區別,所以不要給sql加入過程
邏輯,如if else等,
原因:數據庫的訪問會跨越多個軟件層,甚至是網絡層。
sql中引入過程邏輯,性能與維護問題將由你的程序承擔。
9,每次充分訪問數據庫
要從一個數據表中提取多段數據的時候,一次全部讀取,而不是分次讀取
10,接近dbms的核心
代碼越是靠近dbms核心,越是執行的快,
有些數據庫允許自己寫c語言等為其編程,這樣肯定快
多多使用數據庫自帶的函數
11,只做必須做的東西
不要重復的造輪子,請使用現有的sql功能和api。
12,sql語言反映了業務邏輯
使用數據庫的監控功能,確保當前執行的業務活動合理并且一致。
13,把邏輯放在查詢中
只要可能就把條件邏輯放在sql語句中,而不是sql的宿主語言。
14,一次完成多個更新
如果可以的話,盡量使用一個語句處理多個更新,盡量減少同一個表的重復訪問,
15,慎重使用自定義函數
優化器對于自定義的函數無能為力
16,簡潔的sql語言。
sql是聲明式語言,所以盡量使用你的額代碼超越業務
17,進攻式編程與異常。
異常與攻擊性編程是個難題。
chapter 2 發動戰爭
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...