データベーススペシャリスト

データベーススペシャリスト資格試験 索引(インデックス)を解説

索引とは何か?

データベースに慣れるまではなかなかイメージできませんよね?

一言で言うと検索を速くするための物なんですが

作成するにはいくつかのポイントがあるんです。

索引(インデックス)とは?

索引とは検索処理を高速化するための仕組みです。

 

ちなみに正規化された表はパフォーマンスが落ちます。

試験の問題で「正規化するとパフォーマンスが上がる」と

いう問題は×ですから引っかからないでくださいね。

 

正規化すると表がばらばらに分かれるので

検索時にその表をつなぎ合わせる作業が発生し

パフォーマンスは落ちます。

 

検索速度を上げるには非正規化と

索引(インデックス)です。

 

索引とは各テーブルの列に対して設定します。

単体の列でも,複数の列でも指定できます。

 

索引を指定しておくと

その列をWhere条件に入れたときの

検索速度は劇的に速くなります。

 

デメリットは

その索引自体の容量が必要なこと。

テーブルのデータプラス索引の領域が必要なので

大量データの場合は,索引だけでも

結構な容量になったりします。

 

あとは,更新や追加するたびに

インデックスを作成しなおす必要がある為

更新系のパフォーマンスは多少落ちる可能性があります。

 

索引(インデックス)を付けたほうが良い属性

取り得る値の範囲が広い属性

その列に存在する可能性のある値が多いほど

インデックスは有効です。

 

例えば顧客Noとか,キーになっているものは

すべての行で値が違うので

索引を入れると確実に速くなります。

 

SQLServerなどでは

主キーを設定した時点で

索引も同時に作成されます。

 

逆に性別など「男性」「女性」「不明」くらいしか

ない項目だと,並び替えたところで

検索結果に変化はほとんどなかったりします。

10000行のうち6000行は男性,4000行は女性と

並んでいても,

そこから男性だけ検索した場合,

10000行のうち6000行にアクセスが必要だし,

それなら10000行全部見て男性を探しても

検索時間はさほど変わりません。

インデックスの種類

B木インデックス

通常インデックスといえばこれを指します。

特徴

  • 完全一致だけでなくある範囲の値を
    検索する時にも有効に機能する
  • order byでも有効に機能する

ハッシュインデックス

特徴

  • ハッシュ値を求めて完全一致で検索するので
    高速だが,範囲検索には不向き
  • Order byでは有効に機能しない

SQLやデータベースについてもっと学びたい方は次の記事でおすすめの書籍を紹介しています↓

SQLServerやデータベースに関する書籍のおすすめランキング!SQLをこれからはじめようと思っている人や,普段SQLを使った仕事をしているけどもっと詳しくなりたい!という方向けに,どんな本を読めばい...

<<   1   2   3   4   5   6   7   8   9    10   11   12   >>

トップページへ戻る

 

リーダブルコードC#

C#を正しい3層構造で造れてますか?

非売品コースを受け取る

#01_はじめに
#02_プロジェクトの作成
#03_右に長いコードを書かない_隣のとなりまでしか訪ねない
#04_隣のとなりまで_右スクロールより縦スクロールの方がいい
#05_IFとELSEがある時は肯定系をIF否定形をELSEにする
#06_比較する時は変数を左_定数を右にする
#07_複数の比較を1回のif文でやらない
#08_booの比較でTrueやFalseを書かない
#09_否定の否定はしない
#10_型チェックはasを使う
#11_メソッドはできるだけ早く抜ける_返却する値を無駄に変数に入れない
#12_対象外の時はすぐに抜ける
#13_都合が悪いケースはガードする
#14_必ずやりたい処理はfinallyを使う
#15_比較演算子はできるだけクラスにさせる
#16_ifの中括弧の省略はしない
#17_if文のリーダブルコードまとめ
#18_名前の付け方
#19_意図が明確な名前を付ける
#20_名前は素直に付ける_連想ゲーム的な名前を付けない
#21_1つの事しかしていなければ短い名前でも理解できる
#22_長いクラス名の扱い方
#23_単数形と複数形で表現する
#24_対になる言葉の組み合わせを決めておく
#25_業務で使う名前は統一する
#26_名前を統一するための辞書ツール作成
#27_メンバー変数にアンダーバーを付ける
#28_ハンガリアン記法を使わない
#29_メソッド内の変数をメソッド最初に全部宣言しない
#30_メソッド内の変数は直前に宣言する
#31_ループの変数はループ内で宣言する
#32_変数を使いまわさない
#33_boolの戻り値はどちらがTrueかをわかるようにする
#34_解放が必要なオブジェクトにはusingを使う
#35_varを推奨する場合
#36_メソッド名の付け方
#37_voidとFunctionを意識する
#38_インテリセンスを意識した名前にする
#39_生成メソッドはCreate_型変換はToを使う
#40_無駄に変数に入れて返却しない
#41_重複をなくす
#42_リージョンで区切らない
#43_アクセス修飾子とsealedを付ける
#44_クラス名はソリューションエクスプローラーで並べることを意識する
#45_クラス名は名詞か名詞句で命名する
#46_クラス名で継承元や特性を表現する
#47_メソッド内にコメントを書かない
#48_分かりづらい部分はメソッド化をしてメソッド名で想いを伝える
#49_コードを読んだ人が「えっ?」と思うことが予想される場所にだけコメントを付ける
#50_コメントで悪いコードを取り繕うことはできない
#51_未実装機能はTODOコメントを書く
#52_リーダブルコードまとめ

ピーコックアンダーソンの書籍はすべてKindleunlimitedで読み放題です