(57)【要約】本発明は、データベース構造に対するクエリの最適化方法に関する。この場合、特定のデータソースに関するデータベース情報を受け取り、受け取ったデータソース情報に基づきこのデータソースのためのサーチデータベース構造を生成する。さらにデータソースに対するクエリ要求を受け取り、このクエリ要求の個々のセクションに対するヒット数の計数によりサーチデータベース構造を分析する。そして実行された分析に基づき最適化されたクエリ要求を計算する。
2004518226.tif 000002
【特許請求の範囲】
【請求項１】
データベース構造に対するクエリの最適化方法において、
特定のデータソース（ＤＳ）に関するデータベース情報を受け取り、
受け取ったデータソース情報に基づき該データソース（ＤＳ）のためのサーチデータベース構造（Ｅ）を生成し、
前記データソース（ＤＳ）に対するクエリ要求を受け取り、
前記クエリ要求の個々のセクションに対するヒット数の計数によりサーチデータベース構造（Ｅ）を分析し、
実行された分析に基づき最適化されたクエリ要求を計算することを特徴とする、
データベース構造に対するクエリの最適化方法。
【請求項２】
個々のツリー構造（Ａ，Ｂ）における同タイプのデータ要素を編成することにより前記サーチデータベース構造を生成する、請求項１記載の方法。
【請求項３】
ツリーのデータ要素各々に番号（ＣＯＵＮＴ）を設け、該番号により、ツリー構造（Ａ，Ｂ）において前記データ要素の下に配置されたデータ要素の個数を表す、請求項２記載の方法。
【請求項４】
リンク要素（Ｈ）を介して第１のツリー（Ａ）の要素と第２のツリー（Ｂ）の要素とをリンクし、１つのリンク要素は１つのデータレコード関係を表す、請求項１から３のいずれか１項記載の方法。
【請求項５】
最適化されたクエリ要求のためのキーセットを決定する、請求項４記載の方法。
【請求項６】
コンピュータシステムにデータを格納するためのデータベース構造において、
データベースエントリを表す第１のタイプ（Ｇ）のデータ要素と、該第１のタイプ（Ｇ）のデータ要素に割り当てられた第２のタイプ（Ｈ）のデータ要素が設けられており、
前記第１のタイプ（Ｇ）のデータ要素は第１のツリー構造中に配置されており、前記第２のタイプ（Ｈ）のデータ要素は第２のツリー構造中に配置されていることを特徴とする、
コンピュータシステムにデータを格納するためのデータベース構造。
【請求項７】
ツリー構造の最終セクションはリンク要素を介してツリー構造の開始セクションとリンクされている、請求項６記載のデータ構造。
【請求項８】
第１のタイプ（Ｇ）である同様のデータ要素の複数のオカレンスが、リンク要素を介して相互にリンクされたデータ要素から成る集合に配置されており、該集合の１つのデータ要素はそのまま個々のツリー構造の一部分である、請求項６または７記載のデータ構造。
【請求項９】
請求項６から８のいずれか１項記載のデータベース構造のためのデータ要素において、第１のポインタペア（ＬＳＲ，ＲＳＲ）と第２のポインタペア（ＬＨＲ，ＲＨＲ）と第３のポインタペア（ＬＶＲ，ＲＶＲ）を有することを特徴とするデータベース要素。
【請求項１０】
ＩＦポインタ（ＩＦ）が設けられている、請求項９記載のデータ要素。
【請求項１１】
コンピュータメモリにロードされると請求項１から５のいずれか１項記載の方法のステップを実行するコード部分を有するコンピュータプログラム製品。
【発明の詳細な説明】
【０００１】
本発明はデータベースシステムのような情報記憶システムに関する。コンピュータベースのこのようなデータ記憶システムの場合、データはメモリやハードディスクドライブのような何らかの媒体に格納され、そこから取り出される。データベースにアクセスする最も一般的な手法はデータベースクエリによるものであって、これはたとえばＳＱＬ命令文によって行われる。このようなデータベースクエリは実際には常に複合的な形態をとり、つまりデータベースクエリは少なくとも２つの満たすべき条件を要求する。クエリに適合するデータのサーチは複数のやり方で行うことができる。たいていはクエリオプティマイザが使用され、これはたとえばルールベースのオプティマイザやコストベースのオプティマイザである。ルールベースのオプティマイザはまえもって定義されたルールセットを使用する。コストベースのオプティマイザは、クエリを構成するデータに関する統計的な情報を使用し、これは各クエリコンポーネントのセレクティビティ（ｓｅｌｅｃｔｉｖｉｔｙ）を推定し、最もセレクティブなコンポーネントに沿ったサーチパスを最初に導くことによって行われる。公知のオプティマイザを使用すると平均レスポンスタイムを短くすることができるけれども、どのような特有のクエリでも最適化するオプティマイザに対するニーズがある。
【０００２】
公知のシステムの場合、データはたとえばリレーショナルモデルをベースとする構造のようなデータ構造に格納されている。公知のデータ記憶システムを利用して格納されるデータを記憶させ、サーチし取り出すことはできるけれども、取り出しに要する時間がかなりかかる可能性があり、殊に複合的なクエリの場合には相当な時間がかかることになる。さらに効率的なデータベース構造を構築するのは複雑であり、したがってコストがかかる。また、データベースの設計が標準どおりではないと、程度の差こそあれサーバのパフォーマンスの劣化がたやすく引き起こされてしまう。しかもデータベースレイアウトまたはデータモデルがいったん定義されてしまうと、あとから変更を加えるのが難しくなってしまい、たいていの場合はそれによってパフォーマンスの損失が生じてしまう。したがって、望ましくないパフォーマンス上の制約が生じることなくインプリメントおよび変更を行えるデータベースシステムに対するニーズが存在する。
【０００３】
最初の目的は、請求項１記載のクエリオプティマイザを提供することによって達成される。サーチパスの決定を複合クエリの各セクションに対するヒット数をベースとすることにより、最少のヒット数によってサーチを最初に導くことができ、したがってクエリに対する結果を迅速に戻すチャンスが増える。請求項４に記載されているようにデータレコード関係を表す付加的なリンクをサーチ構造に設けることによって、オプティマイザは所定のクエリセクションのヒット数を考慮できるだけでなく、最もセレクティブなサーチキーを引き出すこともできる。
【０００４】
請求項６に記載されているようにデータ構造を設けることで、パフォーマンスが制約されることなくインプリメント可能なデータベース構造が実現され、このデータベース構造は上述のクエリオプティマイザ手法によって利用することができる。パフォーマンスの犠牲というリスクを生じさせることなく、後から簡単に変更することができる。本発明のデータ構造を使用することによって、クエリオプティマイザのあらゆる利点がデータ構造自身の中に取り込まれる。これによって別個のサーチデータ構造の必要性がなくなる。
【０００５】
その他の特徴や利点は本発明の複数の実施形態に示されている。従属請求項には本発明の有利な実施形態が示されている。
【０００６】
図１にはデータベースがテーブルとともに示されている。図２には本発明によるツリー構造の一例が示されている。図３には本発明によるツリー構造に関する別の例が示されている。図４には本発明によるデータ構造の一例が示されている。図５には本発明によるデータ構造の詳細が示されている。図６には本発明によるデータ要素が略示されている。
【０００７】
図１には本発明の実施形態に関する最初の例が示されている。ここにはデータを含むデータソースＤＳ（これはたとえばデータベースまたはアプリケーションとすることができる）が、列Ａ，Ｂをもち複数のデータ要素から成るテーブルＣとして格納されたデータの若干の部分とともに示されている。なお、データソースＤＳはいかなる種類のものであってもよく、テーブルＣは１つの例である。
【０００８】
本発明によれば、外部データ構造Ｅには図２に示されているような形態が与えられている。便宜上、データ構造Ｅをサーチデータ構造と称し、これはデータクエリに基づき構造を分析するためこの構造においてサーチを実行するために用いられることになる。データ構造Ｅにおいて、個々の列Ａ，Ｂの要素はバイナリツリー構造としてまとめられている。ツリーにおける各要素は図２では円として描かれており、その上部左側部分には属性の値（ＶＡＬ）が、上部右側部分には要素のタイプの特有の識別子（ＩＤ）が示されており、さらに下部には、個々の要素の下位の分岐にはいくつの要素が存在するのかを少なくとも表す数字（ＣＯＵＮＴ）が示されている。なお、この例では下部の数には個々の要素自身も含まれている。列ＡまたはＢにおいてあるインスタンスに対し複数のエントリが存在するならば、個々のエントリの個数によって上述の数字ＣＯＵＮＴを増加させることでそれらのエントリが考慮される。要素がツリーに加えられたりツリーから消去されたりしたときには、ＣＯＵＮＴ数字を更新する必要がある。たとえばインターネットのようなデータ通信リンクを介するなど何らかのやり方によって、データソースＤＳから本発明によるプログラムのインプリメンテーションへデータを伝送することができ、さらに本発明のためのデータ構造を何らかの適切なやり方で構築することができる。有利にはサーチデータ構造は、高速なアクセスタイムが得られたとえばＲＡＭのようにランダムにアクセス可能なメモリに格納される。
【０００９】
この例ではデータソースＤＳのごく小さなセクションだけしか示されていない。実際にはかなり多くの列が使用され（したがってツリーも相応の個数）、同様に非常に多くの個数のテーブルまたは同等の構造が使用される。さらにツリーは何らかの手段によってインプリメンテーションにおいてアクセス可能となり、これはたとえば複数のツリー構造にわたり階層状に配置されたポインタなどのようなリンク要素によって行われることになる。このリンク要素自体は、ツリー構造をアクセスできるようにする別のコンフィギュレーションの一部分とすることができる。
【００１０】
データソースＤＳにおけるサーチのためのクエリがたとえばＱ１ ＡＮＤ Ｑ２ＡＮＤ Ｑ３のような複合クエリのかたちで要求されると（ここでＱ１，Ｑ２，Ｑ３はデータベースサーチのための程度の差こそあれ各々セレクティブなステートメントであるセクション）、本発明によるクエリオプティマイザはデータベース構造Ｅにおけるサーチを以下のようにして行うことになる。クエリの各セクション（すなわちＱ１，Ｑ２，Ｑ３）ごとに、要求された要素が見つかるまでパスに沿ってツリーＡ，Ｂの個々の分岐を辿っていくことでヒット数が求められ、個々の値ＣＯＵＮＴからヒット数を計算することができる。規準（ｃｒｉｔｅｒｉｏｎ）に合致する要素の個数を見つかった要素自体のＣＯＵＮＴパラメータからそのまま得ることができるし、あるいは見つかった複数の要素の単純な加算および／または減算により得ることができる。したがって要求されたデータを取得するためにツリーを最後まで完全に辿る必要がない。なお、このような（バイナリ）ツリーのサーチは（バイナリ）ツリーにおけるレンジのサーチと同様、従来技術において知られている。
【００１１】
その結果、個々のコンポーネントＱ１，Ｑ２，Ｑ３各々に対するヒット数は既知である。この情報に基づきオプティマイザはクエリの実行順序を選択することができ、最少ヒット数のコンポーネントはおそらくは最もセレクティブな条件（ｓｅｌｅｃｔｉｖｅ ｃｏｎｄｉｔｉｏｎ）であることから、有利には最少ヒット数のコンポーネントから開始する。また、コンポーネントごとのヒット数を他の何らかのやり方で最適化に利用することもでき、そのようなやり方には他のクリテリアと合成することあるいはそれといっしょに使用することが含まれる。
【００１２】
この例の場合、構造Ｅをリアルタイムに更新する必要はない。データソースＤＳ内でデータを変更するレートに応じて構造Ｅを周期的に更新することができ、たとえば毎時または毎日更新することができる。構造Ｅを完全に更新しておかないと、データソースＤＳに対して正確なヒット数が計算されないという誤差が引き起こされるが、この誤差が所定の範囲内で維持されていれば推定を効果的に使用することができる。周期的な更新の利点は、リアルタイムの更新であれば必要とするような多くのリソースを必要としないことである。
【００１３】
本発明のさらに別の実施形態によれば、要素数だけでなく各要素間の関係も構造に取り込まれる。次にこれについて図３にＥ′として示す。この場合、リンク要素Ｈが破線で示されており、これはたとえば１つのレコードに組み込まれたデータを表す。この破線は１つのレコードの各フィールド間のリンクを表す。その際、リンク要素をたとえばポインタとしてインプリメントすることができる。ここでは別のツリーＦが示されており、このツリーはテーブルＣの別の列を表している。図３に示されているようにテーブルＣの後続の列が１つのツリー構造として配置されており、これは個々のＩＤ番号によってソートされている。その利点は、個々のツリーＡ，Ｂ，Ｆへのアクセスを非常に高速かつ効率的に行えることである。
【００１４】
クエリコンポーネントの分析にあたりヒット数を計算できるだけでなく、最もセレクティブなキーを見つけることもでき、この場合、どのようなキーでも選択することができる。その結果としてクエリオプティマイザはクエリコンポーネントを最適な順序で戻すことになり、ここでクエリコンポーネントはもともとのクエリと同じである必要はない。このような新たなクエリを用いてデータベースをサーチすることができる。このインプリメンテーションによって、最適なクエリキーを得るための迅速かつ効率的な手法が提供される。
【００１５】
有利にはすべてのツリーは整数の識別値（ＩＤ）によって識別され、それらの要素も有利には整数またはその他の単純な識別子形式によって識別される。このようにすることの利点はサーチ中、かなり単純な（したがって高速な）比較を行えばよいことである。なお、バイナリツリーを設けるということは本質的なことではなく、本発明をたとえばＡＶＬツリー、２−３ツリー、Ｂツリー、スプレイツリーによって適用することもでき、さらに基本的にレンジサーチを許容するいかなるデータ構造によっても適用可能である。とはいうもののバイナリツリー（およびたとえばバランスツリー）によって最も高速な総アクセスタイムが保証され、これはインプリメントおよび使用法が非常に簡単である。
【００１６】
これまで説明してきた例の場合、本発明は別個のデータソースといっしょに使用される。これによって得られる利点とは、既存のデータベースシステムを利用できることであり、アプリケーションをメインのデータソースとは別個に使用できることである。本発明のさらに別の実施例によれば第２の例のサーチデータベースは、データベース構造を得るために所定のフィーチャによって大きくされており、そのデータを記憶し取り出すことができる一方、高速なクエリオプティマイザの利点が取り込まれる。
【００１７】
図４にはテーブルＫが示されており、このテーブルは３つの列すなわちそれぞれ名前、年齢および体重の列をもっている。本発明によるデータベース構造の場合、各列はバイナリツリー有利にはバランスＡＶＬツリーで作成されている。このツリーはテーブルのデータを含む複数のセルから成る。個々のツリー中の個々のセル間のリンクはテーブルにおいて１つの行（つまりデータレコード）を表すリンクであって、これは構造Ｈ′を介して行われる。たとえばポインタから成るこの構造Ｈ′によって、隣接するツリーの個々のセルが結ばれる。この場合、構造Ｈ′も、テーブルの列を表す個々のツリーの識別子についてソートされたツリーを成している。前述の例と同様、各セルにはＣＯＵＮＴパラメータが設けられており、これは各セルの隣りのボックスとして示されている。前述の例と同じようにＣＯＵＮＴパラメータは、個々の要素の下位の分岐中にいくつの要素が存在するのかを表している。
【００１８】
本発明による構造を利用すれば、キーの形態でリジッドな構造をｇ強制することなくデータベースにデータを格納することができる。ツリーやリンクを単に加えることにより、パフォーマンスを妥協することなく本発明の構造を拡張、修正、変更することができる。高速なサーチルーチンに必要とされるパラメータはデータ構造に含まれており、したがってクエリオプティマイザの上述の例をデータベース構造に対する制約なく利用できる。二次的なサーチデータベース構造を構築する必要がない。
【００１９】
先行の例の場合、ツリーの要素はすべて異なる。このようなことは何らかのアプリケーションの場合にはあり得るけれども、記憶すべき大半のデータは複数の同一のエントリをもつことになる。このような状況のため図５に示されているような構造が使用される。この例の場合、エントリＢＯＢが３回現れている。データ構造構築中、ＢＯＢに関する連続するセル各々はすでにそこにあるセルの隣りに置かれ、ポインタリングを介して他のセルとリンクされる。図示されている例の場合、ポインタリングは双方向である。片方向リングでも十分であるかもしれないが、双方向のアーキテクチャはリングを介したナビゲーションにおいて有利である。最後に加えられたセルはそのままツリー構造の一部分となる。セルフリング中に隣接セルをもつツリー構造のセルとそうでないセルとを区別するため、図５のセルの下方のセクションに示されているように各セルごとに変数が設けられている。この事例では変数０はセルが隣接セルをもたないことを表し、つまり複数のオカレンスが存在しないことを表す。図５に示されているように１つのリング内の各セルは、破線で示されているように次のツリーへのリンクを維持している。このようにして、この構造によりすべてのデータ情報が完全に保持される。さらにリングゆえにいかなる複数のオカレンスについてもＣＯＵＮＴパラメータを調整する必要があり、その目的はＣＯＵＮＴパラメータによって個々のセルの下位の分岐中にいくつのセルが存在するのかを表せるようにすることである。ＣＯＵＮＴパラメータにセルフリング中の要素数を含めることができる。また、セルフリングコンフィギュレーションを最初の２つの例で示したサーチ法とともに使用することもできる。
【００２０】
データ構造をさらに利用しやすくするためツリー構造の終端要素すべてに、個々のツリーの上方セクションまたはスタートセクションを指すリンク要素が設けられる。このようなリンク要素をインプリメントするにはポインタが効率的な手法である。リンク要素によってツリーに対するリング構造が用意され、構造を介したナビゲーションのインプリメントがいっそう容易になり、ポインタを使用した場合にヌルポインタの発生が回避される。
【００２１】
データ構造をインプリメントするため、図６に示されているように本発明によるデータ要素Ｇを用いることができる。このデータ要素はデータ構造全体にわたって汎用的に利用することができ、必要に応じて変更を行ってフィーチャを取り除いたり特別なフィーチャを含めたりすることができる。なお、本発明はこの特定のデータ形式に限定されるものではなく、他のインプリメンテーションも利用できる。
【００２２】
図６ではデータ要素は概略的に示されている。要素Ｇにはポインタの３つのペアと単独のポインタが設けられている。第１のペアのポインタには参照符号ＬＶＲとＲＶＲ（それぞれ Ｌｅｆｔ Ｖｅｒｔｉｃａｌ Ｒｉｎｇ， Ｒｉｇｈｔ Ｖｅｒｔｉｃａｌ Ｒｉｎｇ）が付されており、第２のペアのポインタには参照符号ＬＨＲとＲＨＲ（それぞれ Ｌｅｆｔ Ｈｏｒｉｚｏｎｔａｌ Ｒｉｎｇ， Ｒｉｇｈｔ Ｈｏｒｉｚｏｎｔａｌ Ｒｉｎｇ）が、第３のポインタのペアには参照符号ＬＳＲとＲＳＲ（それぞれ Ｌｅｆｔ Ｓｅｌｆ Ｒｉｎｇ， Ｒｉｇｈｔ Ｓｅｌｆ Ｒｉｎｇ）が、さらに単独のポインタには参照符号ＩＦ（Ｉｎｆｏｒｍａｔｉｏｎ ｂｒｉｄｇｅ）が付されている。ＬＶＲ／ＲＶＲのペアは、同じタイプの要素を包含するツリー構造のために用いることができる。ＬＨＲ／ＲＨＲのペアは、ある要素を隣接ツリーとリンクするために用いることができる。ＬＳＲ／ＲＳＲのペアは、同様の要素を１つのセルフリング構造に含めるために用いることができる。
【００２３】
図６に示されているように初期状態では、すべてのポインタはデータ要素自体を指している。要素が構造に加えられるか挿入されると、リングコンフィギュレーションが維持されるようポインタの向きが変えられ、その結果、構造中のすべてのポインタが有効なアドレスをもつようになり未定義のポインタ（ヌルポインタ）の発生する状況が回避される。これに加えて、データ要素に複数のパラメータ値を設けることができる。データ構造内の他の何らかのインスタンスとのリンクのためにＩＦポインタを用いることができ、それはたとえば同じツリーまたは別のツリーの他の要素であったり、あるいは１つまたは複数高い階層レベルの要素などである。ＩＦポインタをたとえばインフォブリッジ ＩｎｆｏＢｒｉｄｇｅ として使用することができ、これはＹアダプタ Ｙ−ａｄａｐｔｅｒ のように見えるリンク要素である。インフォブリッジ ＩｎｆｏＢｒｉｄｇｅ によって、どのような内部データ構造でも本発明のデータ構造のコンテキスト内で構築できる。
【００２４】
この例ではデータベースのごく僅かなセクションしか示されていない。実際には多数の列（したがって相応の個数のツリー）が用いられ、同様に多数のテーブルまたは類似の構造が用いられる。しかもツリーはインプリメンテーションにあたり何らかの手段によってアクセスしやすくなり、たとえばそれはポインタのようなリンク要素であって、このようなリンク手段自体を、ツリー構造のアクセスを容易にするさらに別のコンフィギュレーションにおける１つのパートとすることができる。
【００２５】
本発明によるデータ構造および方法のインプリメンテーションは図示の例に限定されるものではなく、何らかの公知の適切な手法を使用して実現できる。典型的には本発明はコンピュータプログラムとしてインプリメントされ、これはコンピュータメモリまたはデータ担体に記憶される。プログラムはプログラムセクションを有しており、コンピュータシステムで実行させたときにこれによって本発明による方法のステップが実行されることになる。
【００２６】
上述のシステムのインプリメンテーションは、適切な手法やプログラミング言語を用いて行うことができる。インプリメンテーションの言語がポインタをサポートしていると有用である。さらにたとえばＣ＋＋などプログラミング言語がオブジェクト指向であるのも有用であり、このような言語はポインタ、オブジェクトおよびオブジェクトクラスを利用できるという付加的な利点をもつ。たいていのインプリメンテーションに関してはテンポラリ要素をもつ付加的な制御構造が必要であるかもしれないが、この種のインプリメンテーションの詳細は公知であり、当業者の理解の及ぶ範囲である。
【００２７】
本発明によるデータ構造は殊にランダムにアクセス可能なメモリ（たとえばＲＡＭ形式のメモリなど）にインプリメント可能であり、この場合、ランダムにアドレスをアクセスすることができる。さらにランダムアクセスメモリを使用することの利点は、どのようなやり方であろうとデータ構造に対する変更によっても効率に作用を及ぼさないことでもある。本発明は有利にはランダムアクセスの行われるメモリにインプリメントされるけれども、このインプリメンテーションはこのような形態に限定されるものではなく、記憶装置における異なるインプリメンテーションも可能である。
【図面の簡単な説明】
【図１】
データベースをテーブルとともに示す図である。
【図２】
本発明によるツリー構造の一例を示す図である。
【図３】
本発明によるツリー構造に関する別の例を示す図である。
【図４】
本発明によるデータ構造の一例を示す図である。
【図５】
本発明によるデータ構造の詳細を示す図である。
【図６】
本発明によるデータ要素の概略図である。
【図４】
2004518226.tif 000003
【国際公開パンフレット】
2004518226.tif 000004
2004518226.tif 000005
2004518226.tif 000006
2004518226.tif 000007
2004518226.tif 000008
2004518226.tif 000009
2004518226.tif 000010
2004518226.tif 000011
2004518226.tif 000012
2004518226.tif 000013
2004518226.tif 000014
2004518226.tif 000015
2004518226.tif 000016
2004518226.tif 000017
2004518226.tif 000018
2004518226.tif 000019
2004518226.tif 000020
2004518226.tif 000021
2004518226.tif 000022
2004518226.tif 000023
2004518226.tif 000024
2004518226.tif 000025
2004518226.tif 000026
【国際公開パンフレット（コレクトバージョン）】
2004518226.tif 000027
2004518226.tif 000028
【国際調査報告】
2004518226.tif 000029
2004518226.tif 000030
2004518226.tif 000031