(Visual Studio Magazine)
5 Surefire ADO.NET Performance Tips
http://www.ftponline.com/vsm/2006_03/magazine/columns/databasedesign/
以下、ざっくり内容
Fast to Code != Fast Code
までは前フリなので読まなくていいです。
● DbCommandBuilder オブジェクトを使って、UPDATEするとき、コマンドテキストに以下ようなコードが自動的に、CommandTextに書かれるが、こいつが効率が悪い
CommandText: "UPDATE EMP SET EMPNO = ?,
ENAME = ?, JOB = ?, MGR = ?, HIREDATE = ?,
SAL = ?, COMM = ?, DEPT = ? WHERE ( (EMPNO
= ?) AND (ENAME = ?) AND (JOB = ?) AND
((MGR IS NULL AND ? IS NULL) OR (MGR = ?))
AND (HIREDATE = ?) AND (SAL = ?) AND
((COMM IS NULL AND ? IS NULL) OR (COMM =
?)) AND (DEPT = ?) )"
こっちにかきなおしたほうが効率がいいぜ。
UPDATE EMP SET EMPNO = ?, ENAME = ?, JOB = ?,
MGR = ?, HIREDATE = ?, SAL = ?, COMM = ?,
DEPT = ? WHERE EMPNO = ?
● DbCommandBuilder オブジェクトの欠点その2
実行時にステートメントを生成
DataAdapter.Update メソッドが呼ばれるたびに、 DbCommandBuilder は結果セットの中身を分析して UPDATE, INSERT, DELETE ステートメントを生成
あらかじめ指定することで、無駄な時間をCUTできる
(2ぺーじ目からは会員のみ読めます(無料で登録できますが))
● 長いデータを検索するのを避ける
● commitの扱い方
トランザクションをコミットすることは、ディスクI/O, ネットワークI/Oのため遅い
Autocommit に注意(DBの種類によってはたいへんなことに・・)
● 適切に DbCommand.Prepare () を使いなさい