常用操作提高效率 之 for 與in
阿新 • • 發佈:2018-11-05
問題如何而來:
對於剛參加工作的我 批量刪除資料通常採用的是前端傳遞到後臺一個物件的id字串 通過逗號分隔的多個id 或者收的直接是一個id陣列 兩個原理一樣第一個後臺要在次使用split(",")做分隔成陣列 ,然後通過遍歷陣列 採用 delete(id) 逐條的執行刪除操作。
以前 這樣寫大家應該明白什麼意思 迴圈裡 通過每條的id 執行一次刪除
for(){
delete from tb_name where id = ?
}
這樣是我一直採用的方式。
首先從功能實現的角度 上面的解決方案並沒有任何問題。
那麼為什麼我會記錄自己對for 與in 的效率問題 是另外一個朋友說他在實現批量處理刪除操作的時候 他們的技術總監說這樣的效率比較慢 讓採用in
實現方式很簡單 就是將以前的單個逐條刪除 轉為 將id陣列轉為一個id集合 sql 實現如下 方式
delete from tb_name where id in ( 傳入id的集合) 我們通常實現刪除一條資料的操作都是採用主鍵id來操作的。
那麼為什麼說採用in的方式效率更高那?
我自己的理解 for迴圈的方式 每執行一次刪除操作就要在資料庫連線池中建立一次連結 執行一次sql的解析等一系列過程 同時增加了資料庫的IO操作
而in 只需要一次的連線 採用or 的形式 對sql的解析也只需要一次 所以從這些方面就說明了 採用in的方式效率更高一些。
其實兩種方式都是來解決實際的問題,如果在後臺系統比如OA 等辦公系統上 這些內部系統在兩者的效率上我們並不會能感受到所以都可以,應用要用在適合的位置,首先要解決問題。