備忘録 20110727

2011年7月27日 日常
Oracle
■小計&合計
GROUPING( 小計項目 ) → 小計項目のSELECT(単一)
GROUPING_ID( 小計項目1, [小計項目2,・・・] )→小計項目のSELECT(複数)
→SELECT結果にて、0,1,3,7....が抽出され、通常行との判別が可能。
→抽出結果を絞り込む際にこの結果を条件に入れると、不要な小計行を排除できる。
ex.where grouping(col1,col2) in (’0’,’7’)

■小計&合計値
GROUP BY ROLLUP( 小計項目1, [小計項目2・・・] )→ 集計項目で小計を計算する。
grouping句と併用。

■クロス集計
GROUP BY CUBE(集計項目1,[集計項目2,・・・])→クロス集計する。

 C1 C2 C3 
R1350   350
R2  200 330530
R3      150150
 350 200 480 
的な表を集計する際に、使用。
selectは出来るが、元の表に戻せないので、よく解らない。
とりあえず、SPREADにて四苦八苦したが、なんとも出来なかったので、断念。
多分今後も使わないかもしれない。


■チューニングの話
新規のSQLを発行するのに、ストアドを作ったが、チューニングしても速度が出なかったので、仕方なく既存の項目にINDEXを貼ったら、パフォーマンスが3000倍になった。SQLの組み替えでコストを減らす努力をするよりも、さっさとINDEXを貼った方が速いし、手っ取り早い事が判明。

■チューニングの話2
コーディングの際に、同一の処理は、同一の記述をしないと、メモリ上で再利用されない。→気まぐれ屋さんのコードからチューニングすべき(俺)

■チューニングの話3
*を使用すると、パフォーマンスが低下するので、必要な項目のみ指定する。
また、OUNT関数を使用する時は、COUNT(列名)で指定する。ただし、COUNT(列名)は、指定した列がNULLの場合はカウントしないので、PK項目等、NOT NULL列を指定すること。

■チュー(略
徒然に。
・テーブルに別命を付けると解析速度が向上するので、別名を付けるようにする。
・ NOT IN句は、内部的にソートマージの結合をすることでテーブルをフルスキャンする。NOT EXISTS句は条件に一致するレコード1件でもあればそこで処理は終了する為、NOT IN句に比べると負荷が小さくなる。

要するに、実行計画を調べて、FULL SCANすんなってことだね。

■Windows Server 2008
タスクから、バッチキックする際に、バッチの起動ディレクトリが、配置ディレクトリじゃない気がする。
とりあえず、cdにて、具体的なディレクトリに移動してから処理を行う方が安全。
ってか、それを意識しないようにするために、フルパスで書きゃーいいものを、目面倒くさがって相対パス使うから、こういうハメになる。

■64bitOS or 32bitOS(ってか、Win7)
どこかに、Win7対応でフリーのSQL接続ツールは無いもんか?
ObjectBrowserは高いし、その他フリーのツールは、これでもかって位にWin7で動かない。Oracle10gがWin7に入らないのもなんとかして欲しい。
パテーション切って、パラで動かすのが一番速そうだけど、当然ながら面倒くさい。
っというか、ObjectBrowserが使いにくくて嫌い。



コメント

お気に入り日記の更新

この日記について

日記内を検索