2008年6月23日 星期一

SQL之美學


「SQL不就是SQL?哪來什麼美學」我看到本書的第一個想法

不過聳動的標題,還是促使我從架子拿下來翻幾頁,

「喔喔!?我好像遇過這件事?」

「原來學校教的離散數學跟檔案結構不是在騙我!?」

於是我把它買回家

本書內容:

SQL的理論,但是是對於實作極度重要的理論
實作以戰爭比喻,而理論部分以兵法比喻
很多內容,會提出某SQL指令或Table設計,為何資料庫會這麼做,它到底在想些什麼,進而產生對應的效率問題

讀了多少

全精讀完,讀懂約七成

重點心得
  1. 正規化的重要性,與Null的潛藏危險:『以正合,以奇勝』,正規化跟非Null是「正」,反正規化跟允許Null是「奇」,問題是何時該反正規化,而不是為何要正規化,正規化跟非Null是必備
  2. 索引是雙面刃,在特定條件下會增加Select效率,但是一定會降低Insert效率
  3. SQL的本質是集合理論,跟資料庫核心接近程度為資料>關聯式(如join,union,group by)>非關聯式(如 order by, case when )Query指令越接近核心速度越快,所以當有複雜的查詢時,關聯度高子查詢要先放在內層
  4. 最佳化處理器(SQL Optimizer),跟前三點有正相關,跟理論背離的Query指令會無法達成最佳化,甚至有時候會搞砸更多事
  5. 鎖定(Lock)是為了保持資料同步下正確,但是SQL通常是處理"整批"資料;所以換句話說,反正規化,條件限制少的Query指令,或牽涉超出集合理論能做的部分,為了保持資料正確性,SQL會加大鎖定範圍
  6. 效率跟前面有前五點必然相關,通常不佳的效率來自於反覆執行的小型指令
  7. 階層式(hierarchy)結構或樹狀結構不適合關聯式資料庫,可以的話盡量用程式解
  8. SQL結構彈性取決於與真實世界符合程度,而非過度動態的表格或高深莫測的語法
結論

實這本書不像封面看起來的無趣,只是有些地方必須要先學過相關的數學或電腦知識,在配上相關實務經驗,才會有豁然開朗的感覺

1 則留言:

匿名 提到...

HI,你好, 我想買SQL之美學這本書, 不過己經絶版了, GOOGLE到你的BLOG, 不知你能不能把這本書賣給我呢, 如果願意,麻煩, MAIL到我的信箱 winyeh1013@gmail.com