集合演算を真っ向から否定する
アレの話
ユニークビジョン株式会社
CTO 青柳公右平
ストアードプロシージャこそ
RDBの真骨頂だ!
本当は
DB理論が大事
DB設計が大事
でも、真骨頂って言っちゃう人が
いるってことは・・・
実はすごいんじゃない?!
最近は
「ストアードプロシージャ」
の存在すら知ら無い人も
いるくらいなので
ここで紹介しちゃいます
自分はRailsを使っても
検索画面はほとんど利用、
更新画面でも複数更新する場合は
使います。
速度比較
集合演算 > カーソルループ
だけど
ストアードプロシージャ
≠
カーソルループ
ほとんど集合演算で済むよ
EC系Web
ストアードプロシージャ23本
うちカーソルループ1本
業務系システム
ストアードプロシージャ498本
うちカーソルループ23本
集合演算の方が早いという理論を
知っていれば怖くないです
カーソルループ使っていても
ちまちまSQLコールするよりは
まし
速度比較
集合演算 > カーソルループ
>>>>>>>>> ちまちまSQL
メリットは?
PostgreSQLマニュアル
40.1.1. PL/pgSQLを
使用することの利点
から
1.クライアント・サーバ間の余計な
やり取りを排除する。
通信のオーバーヘッド
通信の遅延
2. クライアントサーバ間において、
クライアントに不必要な中間結果の
整理と転送を不要とする。
手マージ?
手ソート?
使いもしない検索結果を
アプリ上のメモリに展開するのは
愚の骨頂!
3. 一連の問い合わせに、複数の解
析が不要である
いくつもSQLを実行する場合に
Prepareを使わ無い場合、
毎回SQLを解析する時間がかかりま
す
他にも大きなメリットとして、
同じような検索を
「共通化」
できるというのがあります
実例
1. 検索画面で全件数と
1ページ分の検索結果がほしい
全件数取得の検索条件と
1ページ分の検索条件は
まったく一緒なので
結果と件数を同時に返して
1SQL発行
2. EC系でチケット購入する
SELECT 商品、企業、店舗
INSERT 購入
INSERT 購入商品
INSERT チケット(枚数分)
UPDATE 会員
DELETE 仮購入
UPDATE 商品
1SQL発行
3. EC系、管理者画面トップ
当月口コミ数
未承認口コミ数
前日購入数
前日ポイント使用数
前日決済金額
当日購入数
当日ポイント使用数
当日決済金額
前月購入数
前月ポイント使用数
前月決済金額
当月購入数
当月ポイント使用数
当月決済金額
1SQL発行
まとめ
理論を踏まえて、
ストアードプロシージャを使えば
RDBの真骨頂!
私のブログにたまにストアードプロ
シージャのノウハウとか、ライブラ
リとかあるんで見てみて
「一行入魂」
http://aoyagikouhei.blog8.fc2.com/
おしまい

集合演算を真っ向から否定するアレの話