有這樣一個疑問,如果是一系列比較複雜的操作,跨表、累加之類的,簡單的 sql 可能需要執行兩個以上才能完成。
用程式設計語言多次執行,結果集裡面折騰有效率呢;還是想盡辦法寫個高深的 sql,一次解決問題呢?
俺 sql 很水,程式設計語言也只是中下遊水平,又有一顆追求優雅、高效之心。
舉個例子:
有個暫存資料表,儲存 pid, tid, duration,通過一次 select,將 (pid, tid) 作為唯一組合,統計其出現次數(count),和 duration 累加總和。
然後將 pid, tid, count, duration 存入另外一個表,還要保證另外一個表的 (pid, tid) 是唯一組合。
插入部分的唯一性已經寫出了稍微複雜的 sql,現在在考慮是將第一部分的結果集遍曆再分別插入,還是再考慮一個更複雜的 sql。
ps: 第二部分插入的題目在:http://segmentfault.com/q/1010000000723454
所用的 sql 為:
alter table stat add unique index pid_and_tid (pid, tid);insert into stat (pid, tid, count, duration) values (1, 1, 1, 1) on duplicate key update count = count + 1, duration = duration + 1
回複內容:
有這樣一個疑問,如果是一系列比較複雜的操作,跨表、累加之類的,簡單的 sql 可能需要執行兩個以上才能完成。
用程式設計語言多次執行,結果集裡面折騰有效率呢;還是想盡辦法寫個高深的 sql,一次解決問題呢?
俺 sql 很水,程式設計語言也只是中下遊水平,又有一顆追求優雅、高效之心。
舉個例子:
有個暫存資料表,儲存 pid, tid, duration,通過一次 select,將 (pid, tid) 作為唯一組合,統計其出現次數(count),和 duration 累加總和。
然後將 pid, tid, count, duration 存入另外一個表,還要保證另外一個表的 (pid, tid) 是唯一組合。
插入部分的唯一性已經寫出了稍微複雜的 sql,現在在考慮是將第一部分的結果集遍曆再分別插入,還是再考慮一個更複雜的 sql。
ps: 第二部分插入的題目在:http://segmentfault.com/q/1010000000723454
所用的 sql 為:
alter table stat add unique index pid_and_tid (pid, tid);insert into stat (pid, tid, count, duration) values (1, 1, 1, 1) on duplicate key update count = count + 1, duration = duration + 1
幾乎任何時候降低資料庫的 計算複雜度 都是好的。
記憶體可重複利用,容易擴充,在大多數情境下都可以利用記憶體來換取資料庫效能,即:從資料庫中簡單地取出資料,再在記憶體中處理成想要的資料。