SQL:INDEXのメリットとデメリットについて

業務でデータベースの操作をする場合、データが大量に登録されているテーブルへアクセスする場合に索引(INDEX)を作成するとSQLクエリの実行が劇的に早くなるケースが多々あります。この索引(INDEX)についてどういう場合に作成すれば良いのか、メリット、デメリット等についてまとめておきます。

どういう場合に索引(INDEX)を作成すれば良いのか

索引(INDEX)を作成した方が良いケース

  • 項目数/データ数が多い大規模な表の1%~15%程の行を頻繁にアクセスする場合
  • WHERE句で頻繁に使用されている列である場合
  • 列の値が比較的一意である場合
  • 参照整合性制約で使用されている外部キーになっている列である場合

索引(INDEX)を作成しない方が良いケース

  • データ登録件数が少ない表である場合
  • 列内の値がほぼユニークである場合
  • NULL値が多く、NULL以外の値を検索しない場合

索引(INDEX)のメリット

  • 表検索(SELCET)する際、特定の行を素早く検索する事が出来る為、検索のパフォーマンスが早くなります。
  • ソート作業を省略出来ます。

索引(INDEX)のデメリット

  • データの登録(INSERT)、変更(UPDATE)の際、索引変更のためのオーバーヘッドが加わるため、索引(INDEX)がないテーブルに比べると時間が掛かります。
  • 索引(INDEX)を作成する領域が必要となります。

Eclipse:デフォルトのVM引数を設定する方法

EclipseでJUnitやDjUnitを実行すると「junit java.lang.OutOfMemoryError: Java heap space」とメモリエラーが表示された場合は「デフォルトのVM引数」を設定する事でこの事象を回避する事が出来るのでその設定方法をご紹介します。

環境

  • Eclipse 4.2
  • Windows7 professional 64bit版

対処方法

  1. Eclipseメニューの「ウィンドウ」⇒「設定」を選択します。
  2. 設定画面で「Java」⇒「インストール済みのJRE」⇒使用しているjdkを選択して「編集」ボタンを選択します。
  3. JREの編集画面で「デフォルトのVM引数」へ以下の様に設定します。

Excel:文字列置換する方法

Excelで文字列置換する場合「SUBSTITUTE」関数か「REPLACE」関数のどちらかを使用します。但し、EXCELのREPLACE関数はJa「この指定文字列をまとめてこの文字列へ置換」というような事は出来ません。EXCELで文字列置換する場合は通常「SUBSTITUTE」関数を使用します。

動作環境

    Microsoft Office Professional 2013

「SUBSTITUTE」関数を使用して文字列置換する方法

  • 「SUBSTITUTE」関数の書式。
    「SUBSTITUTE(文字列, 検索文字列, 置換文字列, [置換対象])」
    • 文字列:文字列置換するセルを指定します。
    • 検索文字列:置換前文字列を指定します。
    • 置換文字列:置換後文字列を指定します
    • 置換対象:指定すると全置換ではなく、検索文字列の「置換対象」個目に出現した値のみ置換対象とします。
  • 「SUBSTITUTE」関数の使用例

Excel:重複データを削除(除去)する方法

Excelで重複データを削除する方法をご紹介します。
重複データを削除するだけならExcelの標準機能で簡単に削除する事が可能です。

動作環境

    Microsoft Office Professional 2013

Excelで重複データを削除する手順

  1. 重複したい範囲を選択し、メニューの「データ」タブ⇒「重複の削除」を選択します。
  2. 重複の削除ダイアログが表示されたら対象の列を選択し、「OK」ボタンを選択します。
  3. 重複データが削除されると以下の様なメッセージが表示されます。
  4. メッセージが表示されたら重複データが削除され、選択した列のデータが一意になります。

JUnit:テスト・スイートクラスの作成方法

通常JUnitでは1クラスに対して1クラス分のテストケースクラスを作成してテストを実施します。何らかの業務でプロジェクト全体での規模になってくるとその数は何十、何百、時には何千となる事も珍しいことではありません。
こういったプロジェクトでソースに何らかの修正が入り、テストを実施するという場合に1つずつJUnitで確認していたのでは実行するだけで無駄に時間が掛かってしまいます。
こういう場合には「テスト・スイートクラス」を作成して、まとめて実行して確認するのが一般的な手法となります。

環境

    pleiades(eclipse4.2)
    junit_4.10.0

テスト・スイートクラスの作成手順

  1. テストケースクラスが保存されているパッケージで右クリックし、「新規」⇒「その他」を選択します。
  2. ウィザード画面で「JUnit」⇒「JUnitテスト・スイート」を選択し「次へ」ボタンを選択します。
  3. テストスイートクラスのファイル名(デフォルトではAllTestsとなります)、保存先のフォルダ、テストしたいクラスを設定し、「完了」ボタンを選択します。
  4. 上記手順で以下の様なテスト・スイートクラスが作成されます。

djUnitで強制的にExceptionを発生させる方法

djUnitではメソッドが呼び出された際、強制的に特定のExceptionを発生させる事も可能です。強制的にExceptionを発生させる場合には「addReturnValue」を使用します。
1点注意しておきたいのは「addReturnValue」を使用してExceptionを発生させた時はjunitで「@Test(expected = RuntimeException.class)」の様にアノテーションでは確認出来ないのでTry~catchで確認する必要があります。

Javaソース

djUnitサンプル

    以下のテストソースでは「URLEncoder」クラスの「encode」メソッドが呼び出された際に「UnsupportedEncodingException」がスローされた事を確認しています。

ttlファイルを実行すると「無効なホスト」と表示される場合の対処方法

TeraTerm用のマクロファイル「**.ttl」ファイルを実行すると「無効なホスト」と表示された場合の対処方法についてメモしておきます。

事象

    「**.ttl」ファイルをダブルクリックして実行する以下の様に「無効なホスト」と表示される。

原因

    ttlファイルに紐付いている実行ファイルへTeraTerm起動用の「ttermpro.exe」が指定されている。

対応方法

ttlファイル用の実行ファイルを「ttpmacro.exe」へ変更します。

  1. 実行したいttlを右クリックして「プログラムから開く」⇒「既定のプラグラムを選択」を選択します。
  2. 「参照」ボタンを選択してTeraTermのインストールフォルダ内にある「ttpmacro.exe」を選択します。
  3. 後は「OK」ボタンを選択すれば「ttpmacro.exe」でttlファイルが実行されるようになります。

TeraTermが日本語表示されない場合の対処方法

TeraTermが日本語表示されない場合の対処方法についてメモしておきます。

事象

    TeraTermを起動すると以下の様にメニュー等の表示が英語になっている。

原因

    言語ファイルの設定が日本語に設定されていない。

対応方法

  1. TeraTermのインストールフォルダ内にある「TERATERM.INI」ファイルをエディタで開きます。
  2. 次に「TERATERM.INI」ファイル内で「UILanguageFile=」と記載されている箇所を探します。
    日本語表示されていない場合は以下の様に「UILanguageFile=」の後に何も記載されていません。
  3. 「UILanguageFile=」の箇所を「UILanguageFile=lang\Japanese.lng」に変更してINIファイルを保存します。
  4. 後はTeraTermを起動すれば日本語化されます。

SQL:複数の値で検索する方法

SQLで1つの項目に対して複数の値に一致した条件で検索する方法をご紹介します。
この場合、考えられる方法としては「OR」演算子を使用する方法と「IN」演算子を使用する2つの方法があります。
通常はIN演算子で済むような条件であればOR演算子は使用しません。

サンプルテーブル

    以下の商品テーブル「goods」を元に説明します。
    商品テーブル「goods」

1つの項目に対して複数の値で検索

    SQL:「OR」演算子を使用する場合

    「OR」演算子を使用する場合、以下の様にWHERE句にOR演算子を指定する事で複数の値で検索する事が出来ます。
    「SELECT * FROM [テーブル名] WHERE [条件1] OR [条件2];」形式で記述します。

    SQL:「IN」演算子を使用する場合

    「IN」演算子を使用する場合、以下の様にWHERE句にIN演算子を指定する事で複数の値で検索する事が出来ます。
    「SELECT * FROM [テーブル名] WHERE [列名] IN ([値1], [値2] …;」形式で記述します。

    実行結果

    「OR」演算子、「IN」演算子どちらで実行した場合も取得結果は以下の様になります。

SQL:範囲検索する方法

SQLで範囲検索する方法をご紹介します。

サンプルテーブル

    以下の商品テーブル「goods」を元に説明します。
    商品テーブル「goods」

単純なレコード件数の取得

    SQL

    SQLはWHERE句にBETWEEN演算子を指定する事で範囲検索結果が取得出来ます。
    「SELECT * FROM [テーブル名] WHERE [列名] BETWEEN [From値] AND [To値];」形式で記述します。

    実行結果