パフォーマンス劣化はインデックスのせいなのか!? をみっちり検証:おら! オラ! Oracle再検証 @IT出張所(1)(1/4 ページ)
本連載は、インサイトテクノロジーが発行しているメールマガジン「おら!オラ! Oracle どっぷり検証生活」で過去に取り上げたテーマを、最新のバージョンや新しい切り口で再検証してみようという企画です。最初に取り上げるテーマは、メルマガの歴史の中でも最も古いテーマであるインデックス検証(B-Treeインデックスのパフォーマンス劣化に関する検証)についてです。
メルマガプレイバック:インデックス検証
メールマガジン「おら! オラ! Oracle どっぷり検証生活」のインデックス検証(vol.009からvol.016)は、インサイトテクノロジーの現TOPセールスマンであるつけまい氏が2000年6月から8回にわたってB-Treeインデックスのパフォーマンス劣化について(徹夜で)検証したものです。
インデックスについては、『おら!オラ! Oracle』の本やその他書籍などで詳しく解説されているので広く知られた機能ですが、Oracleをあまりよく知らない人にとって、このメルマガは少し理解しづらい内容になってしまっています。
そこで、この「おら! オラ! Oracle再検証 @IT出張所」では、Oracleをよく知らない人でも検証の内容が理解できるように、インデックスについて解説しようと思います。そして、その後でOracle Database 11gでの再検証と、新たな切り口でインデックスの検証を実施する予定です。
今回のネタもと記事※インサイトテクノロジーのバックナンバーページ
▼初出メルマガ(vol.009)
▼初出メルマガ(vol.010)
▼初出メルマガ(vol.011)
▼初出メルマガ(vol.012)
▼初出メルマガ(vol.013)
▼初出メルマガ(vol.014)
▼初出メルマガ(vol.015)
▼初出メルマガ(vol.016)
今回は、インデックス検証作業で必要な以下の知識について解説していきます。
- インデックスの構造
- リーフ分割
- データ削除時の状態
インデックスってそもそもどんなヤツ?
まずは、インデックスとは何かについて触れておきましょう。
読者の中には、インデックスは遅いSQLの条件句の項目に付けるもの、とだけしか知らない方も多いのではないでしょうか?
インデックスをひと言でいえば、「データを小さい順に並べた箱」です。データが順番に並んでいることで、目的のデータを簡単に突き止めることができます。
例えば、本屋や図書館では本のIDや作者ごとに本が並んでいます。また、CDショップではCDがアーティスト名順に並んでいます。このように、なんらかの規則に基づいてものを並べることで、ほしいものを容易に探せるようになっています。ときどきCDショップのセールなどで何の規則性もなくCDが並べられていたりしますが、あの中から目的のCDを探し出すのは至難の業です。
Oracle Databaseのインデックスの特徴
Oracleのインデックスは、この本やCDと一緒で、値を小さい順に並べて目的のデータを簡単に抽出できるようにしています。ちなみに、Oracleのテーブルデータの方は、基本的にINSERTした順にデータが格納されているだけで、順番には並んでいません(順番に並ぶこともありますが、Oracleはその並びを認識していません)。このため、インデックスなしで目的のデータを探そうとした場合、テーブルのすべてのデータを参照しなければなりません。これでは、データ件数が数千万件あるようなテーブルの場合、検索結果が返ってくるまで数十分かかる、なんてことになってしまいます。
このような不要な読み込みを防ぐために、Oracleは値が小さい順に並べたインデックスで目的のデータを簡単に取得できるようにしているのです。
Copyright © ITmedia, Inc. All Rights Reserved.