2004年 9月16日 作成 「基準編第12章 (INDEX-only と null-keys)」 を読む >> 目次に もどる
2007年 6月16日 更新  




[ 本稿、前回からの続き ]

高 パフォーマンス を実現する 「INDEX-only」 の多用は、逆に、パフォーマンス を低下する。

 「INDEX-only」 は、RDB の高 パフォーマンス を実現する技法であるが、インデックス の数が増えれば、更新の負荷が高くなって、逆に、パフォーマンス を低下してしまう。
 そのために、オンライン・リアルタイム 環境のなかで、更新 (ADD、UPDATE、DELETE) が多いことを前提にして、パフォーマンス が低下しない インデックス の数を、目安として、提示しておいた。

 「INDEX-only」 は、RDB の高 パフォーマンス を実現する技法であるが、「魔法の杖」 ではない。「INDEX-only」 を使うなら、以下の点に注意されたい。

 (1) 夜間 バッチ でも、インデックス が多ければ、当然、データ の ロード (load) は、おそくなる。
 (2) データ 件数が少なければ--メモリー のなかで対応できる件数であれば--、劇的なききめは出ない。

 
更新 トランザクション のなかでは、ADD は、いちばん、論理 I/O 回数が少ない。

 「論理 I/O の計算式」 を記述した理由は--CPU や メモリー が廉価になった現代では、1つの画面に対して、こまかな I/O 計算などしないが--、論理 I/O の数が、いちばん少ない トランザクション は、ADD であることを示すためであった。すなわち、高 パフォーマンス を実現したいなら、ADD を使えば良い、ということである。たとえば、「更新履歴」 を記録する際、最新情報 (最新の データ が収められた テーブル) と履歴情報 (更新前の データ が収められた テーブル) の 2つを用意して、DETELE (あるいは、CHANGE) と ADD の 2つの トランザクション を使うことが多いが、1つの テーブル のなかで、最新情報と履歴情報を収めれば、ADD のみを使えば良いので、更新負荷が軽減される。
 ちなみに、最新情報と履歴情報を、1つの テーブル のなかに収めたら、「日付 + 認知番号 + (その他の) データ 項目」 という 「INDEX-only」 を用意しておけば、最新情報も履歴情報も、それぞれ、入手することができる。

 
ヌル・キー を高 パフォーマンス 実現のために使うなら、B-tree から排除されることが前提になる。

 「ヌル・キー (null-keys)」 は、「多量の データ のなかから、任意の少量 データ を入手する」 ために役立つ技法である。また、補集合に対して、ヌル・キー を使えば、高 パフォーマンス を実現できることがあるので、考慮されたい。
 ただし、ヌル・キー を使って高 パフォーマンス を実現するためには、ヌル・キー が (インデックス・ファイル の) 「B-tree」 構造から排除されなければならない。RDB のなかには、ヌル・キー を 「B-tree」 構造のなかに生成する プロダクト もあるので、注意されたい。 □

 

[ 補遺 ] (2007年 6月16日)

 本 エッセー では、「INDEX-only」 の注意点を詳細に述べているので、取り立てて、補足する点はないでしょう。

 前回も述べましたが、すべての データ が メモリー のなかに収まって、データ 演算の すべてが メモリー のなかで実行できるようになれば、「INDEX-only」 などいらない。いずれ、そういう時代がくるかもしれない。「INDEX-only」 は、テクノロジー が進歩するにつれて、その有用性が弱まって、ついには、消え去る運命の技術です。ただ、現代の テクノロジー では、「INDEX-only」 は、ききめがあるでしょうね。

 「INDEX-only」 に関する注意事項として、私の著作のなかで、具体的な プロダクト ごとに--DB2、ORACLE、SQL/Server、PostgreSQL ごとに-- ひとつの テーブル に対する CREATE INDEX の限界数を述べたことがあったのですが--たとえば、DB2 や ORACLE なら 5個、SQL/Server や PostgreSQL なら 3個と--、その 「プロダクトごとの目安」 を、そのまま、パクった書物があるそうです (苦笑)。それらの数値が流用されることを、私は、どうこう思ってはいないのですが、その書物を執筆したひとが、出典を示さないで、あたかも、みずからが験証してきた数値のように記述されるのは、きわめて不快感を覚えます。そういう行為を盗作・剽窃とは言わないまでも、知的産業に従事しているひとが やってはいけない行為でしょうね。出典さえ示せば宜しい。ひとりが験証できる量など高が知れているのだから、そして、われわれは、情報を交換しながら、そして、過去の知識を継承しながら、テクノロジー を いっそう進めるのだから、ほかの人たちの知識を借りることは、なんら、恥でもないでしょうに。逆に、あたかも、ひとりで 技術を作ったように 自惚れるほうが下衆(げす)いでしょう。私が 「INDEX-only」 や 「null-key」 の使いかたを着想したのは、DATACOM/DB の DBA をやった経験がもとになっています。DATACOM/DB という プロダクト 名を感謝して述べることに、私は、なんら、「宣伝」 を入れている訳でもないし、私は、その プロダクト を通して データベース に関する技術を習得できたので、プロダクト 名を隠すつもりもない。

 





  << もどる HOME すすむ >>
  「論理データベース論考」を読む