2011年4月28日木曜日

Windowsの定期バックアップ

①SQLサーバーで定期バックアップを作成
②バッチを作成し、他のマシーンにコピーする。
バッチ例)
rem 今日の日付けのバックアップをコピーする。
set yy=%date:~2,4%
set mm=%date:~7,2%
set dd=%date:~10,2%
rem コピー元のフォルダを定義
set moto_fname=C:\フォルダ名\backup_db_%yy%%mm%%dd%.BAK
rem コピー先のフォルダを定義
set saki_dir=\\192.168.1.11\d\フォルダ名\
rem コピー先のファイル名を定義
set saki_fname=%dst_dir%\backup_db_%yy%%mm%%dd%.BAK

rem コピーをする。
cd %saki_dir%
copy %moto_fname% %saki_fname%

③定期的にバックアップを削除する。

2011年4月22日金曜日

インデックス

●インデックスにも色々種類がある
 ・B-Treeインデックス
 ・ビットマップインデックス
 ・関数インデックス
 等

 →CREATE INDEX文でオプションを指定しない場合は
  通常B-Treeインデックスが作成されるらしい。

●B-Treeインデックスの理論
 B-Treeインデックスは二分割にして二分割にしてその軍から探す。
 1-1000から555以上を探す場合。
 1-500の郡501-1000の郡から501-1000の郡が決定され
 次に501-600郡・601-700郡,701-800郡,801-900郡,901-1000郡
 の場合501-600郡の中から探す。


●結合インデックス
 複数の行のでのインデックス
CREATE INDEX idx
  ON tsumiki_mst(col1,col2)

col1の単独インデックスとしても使用できるが、
col2の単独インデックスとしては使用できない。
col1,col2を同時に使う場合は使用可能。
→なので単独インデックスとして使用する可能性がある項目を
  最初に書く


●インデックスマージ
 単独インデックスを複数使用して検索する事
 結合インデックスの方が早い


●インデックスが使われない場合
カラムのNULL値に対して
 !=(Not Equals)を使ったSQL文
 ・like文→'%~'のSQL文
 ・演算子を使ったSQL文
  例)インデックスがきかない。
SELECT
  *
FROM
  tsumiki_sales
WHERE
  val * 2 > 2000

    インデックスが有効になる。
SELECT
  *
FROM
  tsumiki_sales
WHERE
  val > 2000 / 2


 参考HP http://www.hi-ho.ne.jp/tsumiki/doc_1.html

2011年4月21日木曜日

String,StringBuffer,StringBuilderの違い

String
→定数のような変わらない値に使用する。
String a = "moji1" を宣言し
 a = a + "moji2" と書くと "moji1"を破棄して "moji1moji2" という文字列を作る。
 (連結と言うよりは新しく作り直す)
 結果としてシステム内が文字列のコピーだらけになってしまい。メモリ確保に
 ガーベッジコレクタを起動させるのでパフォーマンスを低下させる要因になる。

StringBuffer
→可変な値(後から文字が増える可能性があるもの)に使用する。
 書き換えによって今まで確保していた以上のメモリが必要になった場合は、
 “今まで確保していたメモリの倍”メモリを確保する。
 (元々確保していたメモリが10だった所に、11入れようとすると
  メモリを20確保して入れる。)

StringBuilder
→考え方はStringBufferと同じ。

StringBufferとStringBuilderの違い
 StringBufferのメソッドはsynchronizedになっていて、
 StringBuilderのメソッドはsynchronizedになっていない。
 StringBufferは複数のスレッドから使用される場合でも安全だが、
 synchronized(=同期化)にはコストがかかるため、処理が遅くなる。
 StringBufferのスレッドセーフを無くしたもの = StringBuffer
(単一スレッドで使うことを前提としたStringBufferクラスの代わりのクラスとなっており、
StringBufferクラスより高速)


※Stringクラスは本来固定長であるため
 一度作成した文字列に後から文字を追加することが出来ない、
 2つの文字列を結合した値を持つ新しい文字列を作成している。
 これに対してStringBuilder・StringBufferクラスは可変長の文字列を扱うクラスで、
 新しくオブジェクトを作成することなく随時文字列を追加することが出来る。


実際の速度の違いについて
何百回も文字連結するのでなければさほどの差は無いみたい。
ループ外でも回数が多ければ StringBuilder。
ループ外で、かつ一桁程度の回数しか連結しないんだったら += でもいい。
らしい

2011年4月20日水曜日

in句とnot in句

inとnot inが逆の意味になると思い使っていたのだが
not inの場合にまったくデータが表示されない場合があった、
データに空データがある場合にnot in句を使うと
逆の意味に動作しない事があるので注意である。