2017年11月19日 星期日

[SQL]程式設計小觀念

有些系統需求會為了方便使用者使用而出現所謂的"勾選執行"、"全部執行"。

當然顧名思義看起來又是把"個別執行"的指令多下幾次給資料庫即可達到的需求。
但是
千萬別這麼做。

個人的悲慘經驗是,寫程式的人可能出有這樣的思維「反正需求可以達到」。
但是這麼做的話下場就是對資料庫的存取次數過多,甚至可能多到直接當掉的可能。
當然Program designer 一開始並不會想到這麼多。

而且最常出現的回應是"去加強硬體設備吧!"

其實我個人也覺得加強硬體設備是手段之一。
但指令也是可以優化的。

如:
個別執行
product_id為1 的價碼更新為100
update product set price='100' where product_id='1'

選擇執行/全部執行
product_id為1與2 的價碼更新為100
update product set price='100' where product_id='1'
update product set price='100' where product_id='2'
或者
update product set price='100' where product_id='1' or product_id='1'
又或者
update product set price='100' where product_id in('1','2')


有沒有發現選擇執行/全部執行可已有三種寫法。
其中第一種存取數會很多,第二種寫的一堆OR 第三種則是用in 搞定一切
或許各有優缺。
目前讓我發現最大的缺點就是存取數過多會造成服務滿載的現象。

所以程式設計師或許不是DBA但在系統設計時替DBA想想。
彼此互助,好過一切動不了!!!

沒有留言:

張貼留言

[人生分享]教育訓練的兩極化

教育訓練的一個成長的過程,這句話相信人人都聽說過,而訓練最後一階段就是訓練者放手,被訓練者獨力完成所有任務,甚至是獨立判斷與進行,並達到預期結果,而這樣的過程後就會出現被訓練的學員們,慢慢的技能會超過訓練師,此時就會有兩種極端的表現是出現。 一、給予訓練師的基本尊重 二、認定訓練...