- PR -

9iと10gの処理時間の差について

投稿者投稿内容
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2007-05-28 15:57
もしもしさん、ラフィンさん、レスありがとうございます。

10gのマシンが旅に出ていまして仰せの調査ができずにいます。

># ただ、YMD のデータ型が不明ですが DATE 型だったら
># 暗黙変換しまくりそうな書き方ですね。

YMD のデータ型はCHAR(です。
後学のためにご教示頂きたいのですが、もし仮にDATE 型だったとして
SELECT文がこの書き方だと暗黙変換になってしまうのでしょうか?

実際のプログラムは

Dim strSQL As String
Dim strYMD1 As String
Dim strYMD2 As String

strSQL = strSQL & "SELECT "
strSQL = strSQL & "S11.CNT SCNT11, S12.CNT SCNT12, S13.CNT SCNT13, S14.CNT "
strSQL = strSQL & "SCNT14, S15.CNT SCNT15, S16.CNT SCNT16, S17.CNT SCNT17 "
strSQL = strSQL & "FROM "
strSQL = strSQL & "(SELECT COUNT(NAME) CNT FROM TBL "
strSQL = strSQL & "WHERE ( YMD >= '" & strYMD1 & "' AND YMD <= ' & strYMD2 & "' )"


こんな感じにしています(^^;
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2007-05-28 16:01
もう1点、補足説明頂きたい点があります。

>データが同じでも統計情報が実情にあって無くて
>全件検索しまくってるとか。

「統計情報が実情にあってない」とは・・・?(無知ですみません)
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-05-28 16:19
SQL の方はもし YMD 列が DATE 型であったとしたら、条件に指定している
strYMD1 の部分は文字列として展開するように書いてますから、実行時には
VARCHAR -> DATE の暗黙変換が実行されてたでしょうね。
(今回は YMD 列が CHAR だそうなので当てはまらないでしょうが。でも
『文字列』データの『値』を『範囲指定』ってのも妙な話ですけど。
DATE でいいじゃない)

統計情報についてはマニュアルを参照のこと。
例えば件数が同じつもりでも表領域上で獲得しているブロックの数が
違ったり索引の内容(削除マークの付いてるデータが多い・少ないとか
その他諸々)、そもそも統計情報を取っていなかったりすると生成される
実行計画が変わる可能性 -> パフォーマンスに違いが出る可能性があります。

# 10g なら基本的にコストベースオプティマイザが実行。ルールベースは
# 動作保証されません(動くけど)。
# コストベースで動かしている場合は統計情報の精度が重要です。
# ...ま、仮にルールベースで動かしてたとしても、実行計画が同じになる
# 保証はありませんが。

_________________
もしもし@RMAN 友の会
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2007-05-28 17:24
もしもしさん、レスありがとうございます。

>略
>VARCHAR -> DATE の暗黙変換が実行されてたでしょうね。

なるほど、そういう事でしたか。了解しました。

>そもそも統計情報を取っていなかったりすると生成される
>実行計画が変わる可能性 -> パフォーマンスに違いが出る可能性があります。

了解しました。

># 10g なら基本的にコストベースオプティマイザが実行。ルールベースは
># 動作保証されません(動くけど)。
># コストベースで動かしている場合は統計情報の精度が重要です。

う・・、このあたり全く無知なのです(今回を契機に勉強します)。
「統計情報の精度」ですか。。。

スキルアップ/キャリアアップ(JOB@IT)