【摘要】
動作豐富的sql語句
action-packed sql statements
此節結論:
儘量減少過程邏輯出現在sql語句,比如if-else之類;能使用一句sql不要分解為過程邏輯,盡量由資料庫系統來提高更高的效率。
為了說明這個問題,我簡要測試以下語句:
a、update tbuser set loginpassword = 222222 where userid = 10020774
begin
if exists(select userid from tbuser with(nolock) where userid = 10020774 and birthday is null)
begin
update tbuser set birthday = tbuserheadpic.ctime from tbuserheadpic where tbuser.userid = 10020774 and tbuser.birthday is null and tbuserheadpic.userid = 10020774 and tbuserheadpic.isused = 1;
endend
b、update tbuser set birthday = tbuserheadpic.ctime,loginpassword = 222222 from tbuserheadpic where tbuser.userid = 10020776 and tbuserheadpic.userid = 10020776 and tbuserheadpic.isused = 1;
a、b兩句在查詢分析器中執行,得出以下結論:
滿足birthday=null條件下,a所有語句執行效率佔68%,b語句佔32%
不滿足birthday=null條件下,a所有語句執行效率佔49%,b語句佔51%
此例的sql邏輯儘管有些混亂,但表述一點:從另一張表的資料賦值到另一表的過程。但在效率上下面一句的效率明顯優勢。
個人觀點
閱讀 SQL語言藝術》實踐二
摘要 sql的進攻式程式設計 offensivecoding with sql 與之對應防禦式程式設計code defensively 在開始處理之前先檢查所有引數的合法性。進攻式程式設計的本質特徵是 以合理的可能性 reasonable probabilities 為基礎。比較二者 常規的程式設計...
SQL語言藝術
內容介紹 本書分為12章,每一章包含許多原則或準則,並通過舉例的方式對原則進行解釋說明。這些例子大多來自於實際案例,對九種sql經典查詢場景以及其效能影響討論,非常便於實踐,為你的實際工作提出了具體建議。本書適合sql資料庫開發者 軟體架構師,也適合dba,尤其是資料庫應用維護人員閱讀。您現在正在檢...
sql語言藝術2
先定義問題,再解決問題 problem definition before solution 一知半解是危險的。人們常在聽說了新技術或特殊技術之後 有時的確很吸引人 試圖採 用它作為新的解決方案。普通開發者和設計師通常會立即採納這些新 解決方案 直到後來才 發現它們會產生許多後續問題。現成的解決方案...