English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

試問在insert update 與delete的寫法裡
有那些寫法最好不要這樣寫
或是有那些寫法會讓效能變得非常的差

2006-11-25 16:53:14 · 2 個解答 · 發問者 九五二七 3 in 電腦與網際網路 程式設計

2 個解答

insert update delete 這是屬於變更資料的命令如果你要了解如何提升效能那就一定要知道他的運作原理啦我現在說明 SQL 指令的運作流程喔1. 指令傳輸 (將SQL指令從客戶端傳到伺服端)2. 語法分析 (檢查SQL指令是不是語法正確且有效的指令)3. 參數傳輸 (將要代入SQL指令的參數傳到伺服端)4. 資料處理 (改變資料的值, 並且建立索引)5. 回報處理狀況這是基本的運作流程我現在說明幾個案例來讓你了解怎麼樣可以提升效能喔假設:有一張資料表 T有三個欄位 A B CA 欄位有建立索引整張資料表有 10 萬筆資料語法解析要 0.1 秒寫入一筆資料必須耗費 0.01 秒讀取一筆資料必須耗費 0.05 秒案例一:如果你的命令是 update T set C=10 where B = 2這個案例中, B 沒有索引, 所以必須讀取 10 萬筆資料檢查有哪些是 B =2所以耗費了 100000 x 0.05 = 5000 秒然後發現有 1000 筆符合條件必須變更所以再耗費 1000 x 0.01 = 10 秒加上語法解析時間總共耗費 5010.1 秒案例二:如果你的命令是 update T set C=10 where A = 2這個案例中, A 有索引, 所以必須讀取索引檔檢查哪些 A = 2這個動作必須耗費 2 x log(2,100000) 約 33 秒然後發現有 1000 筆符合條件必須變更所以再耗費 1000 x 0.01 = 10 秒加上語法解析時間總共耗費 43.1 秒這兩個案例是一很重要的基礎告訴你有索引和沒索引的差別這個理論可以用在所有需要 where 的地方因此下 delete 和 update 指令時需要注意喔所以 delete 接下來就不講囉案例三:如果你的命令是insert into T(A,B,C) values(...,...,...)並且有 1000 筆資料要輸入這個動作必須耗費寫入時間 0.01 秒加上語法解析時間 0.1 秒總共耗費 0.11 秒因為 1000 筆的關係所以 1000 筆資料都輸入完需要 110 秒案例三是告訴你大量資料輸入的時候會耗費掉很多的語法解析時間雖然是一模一樣的語法但是卻要很冤枉的跑 1000 次這個問題並沒有辦法透過修改 SQL 語法來改善但是可以利用 preparedStatement 技術來改善喔你可以參考 java.sql.preparedStatement 這個類別或是 JDBC 的書籍來學習如何讓 SQL 指令只需要解析依次之後需要輸入別的數值就可以用代入法來省掉解析時間如果採用了這項技術那麼案例三的動作就變成語法解析 0.1 秒寫入 1000 筆資料 10 秒總共 10.1 秒這樣你知道如何增進大量資料 insert 的效能了嗎順便說明一下 preparedStatement 技術並不是只能用在 insert 指令喔 select update delete 指令都是可以用的這樣子的解說希望可以讓你的 SQL 指令跑得更快喔 ^^

2006-11-26 21:10:59 · answer #1 · answered by 小璋丸 5 · 0 0

我個人是覺得用迴圈寫很不好 因為進出太多次 應該一次讀出 然後再把 dataset 看是怎麼處理比較好 不知道其他大大意見如何

2006-11-26 12:57:41 · answer #2 · answered by Jessicaca 3 · 0 0

fedest.com, questions and answers