分123はじめにデータベースを扱う仕事をしていると,パフォーマンスの問題に悩まされることは日常茶飯事です。最近は,データベースに格納されるデータ量が飛躍的に増え,サーバのCPUやメモリといったハード面の増強だけでは追いつかないことも多くあります。そのようなケースに対応するため,DBMSは性能改善のための手段を多く用意しています。その中で最もコストパフォーマンスの良い方法が,インデックス(索引)です。アプリケーションにもハード構成にも影響を与えずに実行でき,うまくいかなければすぐに削除できるという手軽さが大きな魅力で,効果はしばしば絶大です。インデックスにはいろいろな種類があり,またDBMSによってもサポートする種類に差がありますが,本稿では最も重要な2つを取り上げます。それが,B-treeとハッシュです。インデックスには,ほかにもビットマップインデックスや関数インデックスなどのバリエーションがありますが,ほとんど使わないか,上の2つの応用で理解できるものばかりです。そのため本稿では,とくに重要な上記2つのインデックスについて,内部ロジックを解説し,それぞれどのような利点と欠点を持つのかを明らかにしていきたいと思います。ハッシュの場合はインデックスに限らず,ハッシュパーティションなど一般的なハッシュの使用法についても同時に説明します。一般的で重要な索引の種類は,B木(B-tree)である。すべてのアプリケーションに最適な単一の記憶構造というものが存在しないことは事実であるが,もし一つの構造が選ばれなければならないとすれば,B木の類が恐らく選択されていることはまず疑いようがない。第6版/丸善インデックスというのは,(⁠x,α)という形式の配列です。PerlやRubyをよく使う人には連想配列と言ったほうがわかりやすいでしょうか。ここで,xはキー値,αはそれに結び付く情報..実データか,あるいはそれへのポインタ..です。実際には,DBにおいてαはデータへのポインタであることが多いため,C言語的な表現を使って,キー値とポインタの配列と言っても良いでしょう。本の最後にあるインデックスも,キーとなる単語と,ページ番号(ポインタ)の連想配列です。B-treeは,インデックスの中では一番ポピュラーで,日常業務で使うインデックスの90%はこれです。INDEX文を実行すると,ほとんどのDBでは,暗黙にB-treeインデックスが作成されるぐらいです。誤解のないように言っておくと,B-Treeは,検索のアルゴリズムとしては飛び抜けて性能の良いものではありません。Bayer自身が「もし世界が完全に静的で,データが変化しないなら,ほかのインデックス技術でも同程度のパフォーマンスは達成できるだろう」と認めています。長所B-treeの長所は平均点の高さです。Dateの言葉を借りるなら,B-treeは「幅広い名手」なのです。B-treeに多角的な評価を付けると,次のように「オール4」の秀才型になります(図1⁠)⁠。B-treeの評価レーダーチャートB-treeがバランスよく高得点を取れる理由は,その構造を見るとわかります。9,10)を含む列にインデックスを作成したとすると,図2のような木が作られます。最下層のリーフ(葉)と呼ばれるノードから,実データに対するポインタが出ています。これは,B-treeに比べて検索をより効率的にしたアルゴリズムで,データベース以外でも,NTFSやXFSなどのファイルシステムでも利用されています。本質的な特徴はB-treeと変わらないため,以下,基本的にこのB+treeを前提に話を進めます。3つの「B」ちょっとトリビアな話ですが,B-treeの「B」が何の意味かはわかっていません。McCreightが明かしていないからです。Boeing社の研究所に勤めていたため⁠)⁠。ときどき勘違いされているようにBinarytree(2分木)のBではありません。B-treeというのがちゃんと存在します⁠)⁠。B-tree著者プロフィールミックSI企業に勤務するDBエンジニア。データウェアハウス業務に従事している。自身のサイト「リレーショナル・データベースの世界」でデータベースとSQLについての技術情報を公開している。Press』で「SQLアタマアカデミー」を連載中。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。