僕の黒歴史2 (ストアドを使えと説得できなかった)
僕が「WAN上のファイル制御」で七転八倒してたのと同じ98年頃
社内で、もう一つのプロジェクトが走っていました。
そこでは、SQLサーバDB をVB6(DAO3.5)でアクセスして
いました。パススルークエリも使っておらず、
テーブルをOpenして「項目アクセス」とか、AddNewしてUpdate
という形です。
当然ながら、処理が非常に遅く、
日次更新とかは、3日たっても終わりませんでした。
(当時のSQLサーバDBには、ダイレクトメモリインタフェースはない)
僕は、それよりずっと前、1970年頃ADABASの講習を受けていたので
それを聞いて「ストアドのカーソル処理を使ったら?」
と言ったのです。
しかし、そこのプロジェクトリーダは、
「ストアドは、クエリより遅いです。本にそう書いてあります」
と言って、取り合ってくれませんでした。
実際、僕もそう書いてある本も読んだことがありますから
実験して見せるしかないと思いました。
しかし、僕は僕で「WAN上のファイル制御」にかかりっ切りで
そんな時間はなく、それっきりになって、
そのプロジェクトは、デスマーチになってしまいました。
僕が、そのプロジェクトリーダを説得できていれば
プロジェクトは成功し、僕の方のプロジェクトがダメでも
会社が倒産に至ることもなかったと悔やまれます。
今なら、実験して見せるまでもなく、口頭で説明できますが、
当時の僕には、SQLサーバDBもDAOも漠然とした知識しかなく
「本に書いてあること」をひっくり返す説得力のある説明は
無理でした。
尚、「本に書いてある」のは、パススルークエリと同じことを
ストアドのカーソル処理でやったら、クエリの方が速い
というだけのことです。
日次更新のような「DBにあったらUpdate、無かったらInsert」
という処理をストアドでやらず、VB6でクエリを組み合わせて
DAOがLAN接続したサーバにアクセスながら処理したら、
何千倍も遅いです(パススルークエリだけでやれば同等?)
これは、対象DB がサーバ内ではDiskアクセスで、
PC側からはLANを通してのTCP/IP手順でのアクセスになる
ので、こうなるのです。
今のSQLサーバDBには、ダイレクトメモリがありますから
サーバ内のVB6で、TCP/IPを使わずこれを使えば
十分速いと、思いますが、、、