(57)【特許請求の範囲】
【請求項１】
複数の論理エリアに分割された２つのテーブルを処理対象として、その２つのテーブルの中に含まれる同一の項目値を持つレコードを結合して１つの結果テーブルを導くジョイン処理を実行するリレーショナルデータベースシステムにおいて、
一方のテーブルの論理エリアを順次選択するとともに、それに合わせて、他方のテーブルについても同様に論理エリアを順次に選択することで、ジョイン対象となる２つのテーブルの論理エリアの全ての組み合わせを決定する決定手段と、
上記論理エリアに１対１に対応付ける形で用意されて、上記論理エリアに属するレコードへのポインタ情報をジョインキー値の大きさの順に管理するインデックスを使って、上記決定手段の決定した論理エリアの組み合わせのそれぞれについて、その組み合わせの論理エリア同士についてジョイン処理を実行する実行手段とを備えることを、
特徴とするリレーショナルデータベースシステム。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、テーブル形式に従ってデータを管理する構成を採るリレーショナルデータベースシステムに関し、特に、テーブルを複数の論理エリアに分割する構成を採るときにあって、ジョイン処理を高速に実行できるようにするリレーショナルデータベースシステムに関する。
【０００２】
近年、リレーショナルデータベースシステムでは、扱うデータの数が益々増加してきている。このような大量のデータを扱うために、リレーショナルデータベースシステムでは、負荷分散を目的とした１つの手法として、テーブルを複数の論理エリアに分割して、それらの論理エリアにデータ（レコード）を格納するという分割格納手法を採るようになってきている。このような分割格納手法を採るときにあっても、高速にジョイン処理を実行できる構成を構築していく必要がある。
【０００３】
【従来の技術】
ジョイン処理とは、２つ以上のテーブルを結合する処理で、一般的に各テーブルのジョインキーとなる項目値の等しいもの同士のレコードを結合して１つの結果テーブルを導く処理である。
【０００４】
このジョイン処理は、例えば、図４に示すような２つのテーブルがある場合に、一方のテーブルＴ１のＡ２欄のデータと、もう一方のテーブルＴ２のＢ１欄のデータとが一致するレコード同士を結合して、そのテーブルＴ１のＡ２／Ａ３欄のデータと、テーブルＴ２のＢ３欄のデータとを出力せよという
ＳＥＬＥＣＴ  Ｔ１．Ａ２，  Ｔ１．Ａ３，  Ｔ２．Ｂ３
ＦＲＯＭ      Ｔ１，Ｔ２
ＷＨＥＲＥ    Ｔ１．Ａ２＝Ｔ２．Ｂ１
といった検索命令を実行するときに必要となる。
【０００５】
このジョイン処理を効率的に実行するためには、先ず最初に、各々のテーブルのレコードをジョインキー（上述の検索命令では、Ｔ１．Ａ２，Ｔ２．Ｂ１）でキーの昇順にソートし、次に、このソートした結果を順検索して、結合キーの値の等しいレコード同士を結合して結果を得る構成が知られている。
【０００６】
一方、近年、リレーショナルデータベースシステムでは、扱うデータの数の増加に対処するために、テーブルを複数の論理エリアに分割して、それらの論理エリアにデータ（レコード）を格納するという分割格納手法を採るようになってきている。
【０００７】
従来、このような分割格納手法を採る場合には、テーブルを構成する複数の論理エリアに跨がってのキーの昇順性を獲得するために、各々のテーブルの全ての論理エリアを対象にジョインキーでレコードをキーの昇順にソートし、次に、このソートしたテーブルを順検索することによりレコードの結合を行う構成を採っている。すなわち、分割格納手法を採るときであっても、複数の論理エリア間に跨がる範囲においてジョイン処理を行うときには、ジョイン対象の全ての論理エリアを対象にジョインキーでレコードのソート処理を実行するという方法を採っていたのである。
【０００８】
【発明が解決しようとする課題】
しかしながら、従来技術のように、複数の論理エリアに分割格納されるような大量のレコードに対してソート処理を行うという方法を採ると、ソート用の外部データセットが不足したり、大量のレコードをソートするために多大な処理時間を要する等、実用性の観点から様々な問題点があった。
【０００９】
本発明はかかる事情に鑑みてなされたものであって、リレーショナルデータベースシステムがテーブルを複数の論理エリアに分割する構成を採るときにあって、ジョイン処理を高速に実行できるようにする新たなリレーショナルデータベースシステムの提供を目的とする。
【００１０】
【課題を解決するための手段】
図１に本発明の原理構成を図示する。
【００１１】
図中、１は本発明を具備するリレーショナルデータベースシステムである。このリレーショナルデータベースシステム１では、複数の論理エリアにレコードを分割格納する第１及び第２のテーブル２，３を持つことを想定している。
【００１２】
更に、この原理構成図では、第１のテーブル２は、３つの論理エリア４-i（ｉ＝１〜３）にレコードを分割格納し、第２のテーブル３は、２つの論理エリア５-i（ｉ＝１，２）にレコードを分割格納することを想定している。
【００１３】
各論理エリア４-i，５-iは、１対１に対応付ける形でＢ+ treeインデックスを備えており、このＢ+ treeインデックスを用いることによりレコードそのものはソートされる必要はない。
【００１４】
６はリレーショナルデータベースシステム１の備える管理手段であって、第１のテーブル２が３つの論理エリア４-iにレコードを分割格納しているという情報と、第２のテーブル３が２つの論理エリア５-iにレコードを分割格納しているという情報とを管理する。
【００１５】
７はリレーショナルデータベースシステム１の備える決定手段であって、第１のテーブル２の論理エリア４-iと、第２のテーブル３の論理エリア５-iとの全ての組み合わせを決定する。
【００１６】
８はリレーショナルデータベースシステム１の備えるジョイン検索手段であって、決定手段７の決定した組み合わせの論理エリア４-i，５-iの持つレコードをジョイン処理の対象としてジョイン処理を実行する。
【００１７】
９はリレーショナルデータベースシステム１の備える結果テーブルであって、ジョイン検索手段８の処理結果を格納する。
【００１８】
【作用】
本発明では、決定手段７は、第１のテーブル２の論理エリア４-iを順次選択するとともに、この論理エリア４-iを選択するときに、第２のテーブル３の論理エリア５-iを順番に選択する。あるいは、第２のテーブル３の論理エリア５-iを順次選択するとともに、この論理エリア５-iを選択するときに、第１のテーブル２の論理エリア４-iを順番に選択する。
【００１９】
すなわち、図１の原理構成図の例で説明するならば、決定手段７は、例えば、第１番目に、論理エリア４-1と論理エリア５-1との組み合わせ、第２番目に、論理エリア４-1と論理エリア５-2との組み合わせ、第３番目に、論理エリア４-2と論理エリア５-1との組み合わせ、第４番目に、論理エリア４-2と論理エリア５-2との組み合わせ、第５番目に、論理エリア４-3と論理エリア５-1との組み合わせ、第６番目に、論理エリア４-3と論理エリア５-2との組み合わせを決定するのである。
【００２０】
ジョイン検索手段８は、この決定手段７による決定処理を受けて、決定手段７の決定した組み合わせの論理エリア４-i，５-iの持つレコードをジョイン処理の対象として、その組み合わせの論理エリア４-i，５-iの持つジョインキーについてのＢ+ treeインデックス（ジョインキー値を昇順にしてテーブルデータ（レコード）へのポインタ情報を管理するもの）を使って、その組み合わせの論理エリア４-i，５-i同士についてジョイン処理を実行して、その処理結果を結果テーブル９に格納する。
【００２１】
このように、本発明では、リレーショナルデータベース１がレコードを複数の論理エリアに分割格納するテーブル構成に従って管理するという構成を採るときにあって、２つのテーブルの各論理エリア単位に、それらの論理エリアの持つジョインキーについてのインデックス（ジョインキー値の大きさの順にテーブルデータ（レコード）へのポインタ情報を管理するもの）を使ってジョイン処理を実行していく構成を採るものであることから、複数の論理エリアに跨がるレコードのソート処理を行わなくても済むようになるので、高速にジョイン処理を実行できるようになる。
【００２２】
【実施例】
以下、実施例に従って本発明を詳細に説明する。
【００２３】
図２に、本発明のリレーショナルデータベースシステム１の実行するジョイン処理の処理フローの一実施例を図示する。次に、この処理フローに従って本発明を詳細に説明する。
【００２４】
リレーショナルデータベースシステム１は、複数の論理エリアにレコードを分割格納する構成を採る２つ以上のテーブルをジョインするときには、図２の処理フローに示すように、先ず最初に、ステップ１で、変数ｉにジョインするテーブル数をセットするとともに、処理対象となるテーブルを識別する変数ｊに“１”をセットする。すなわち、図３に示すように、テーブルＴ１と、テーブルＴ２という２つのテーブルをジョインするときには、変数ｉにテーブル数の“２”をセットするとともに、変数ｊにテーブルＴ１を識別する“１”をセットするのである。ここで、テーブルＴ１，Ｔ２は、各論理エリア毎に、Ｂ+ treeインデックスを備えることを想定している。
【００２５】
次に、ステップ２で、変数ｊが示すｊ番目のテーブルの最初の論理エリア（図中ではＤＳＩと略記する）をジョイン対象として位置付ける。すなわち、図３の例で説明するならば、テーブルＴ１の論理エリア＃１をジョイン対象として位置付けるのである。
【００２６】
続いて、ステップ３に進んで、変数ｊの値を１つカウントアップし、続くステップ４で、変数ｊの値が変数ｉの値よりも大きくなったか否かを判断して、大きくないとき、すなわち、まだ論理エリアを位置付けていないテーブルがあるときには、ステップ２に戻っていく。この処理に従って、図３の例で説明するならば、ステップ３の処理に従って、変数ｊの値が“１”から“２”に増分するときに、ステップ４で変数ｊの値が変数ｉの値よりも大きくないことが判断されることから、ステップ２の処理に従って、変数ｊの値が“２”であるときに指されるテーブルＴ２の最初の論理エリア＃Ａがジョイン対象として位置付けられることになる。
【００２７】
ステップ４の判断で、変数ｊの値が変数ｉの値よりも大きくなったことを判断すると、ステップ５に進んで、Ｂ+ treeインデックスを参照しつつ、ジョイン対象として位置付けた論理エリア同士のジョイン処理を実行する。すなわち、図３の例で説明するならば、テーブルＴ１の論理エリア＃１と、テーブルＴ２の論理エリア＃Ａとの間で、Ｂ+ treeインデックスを使いレコードのソート処理を行うことなく、ジョイン処理を行うのである。
【００２８】
続いて、ステップ６で、変数ｊに“１”をセットする。すなわち、図３の例で説明するならば、変数ｊがテーブルＴ１を示すようにセットするのである。続いて、ステップ７で、変数ｊの指すｊ番目のテーブルの最終の論理エリアになったのか否かを判断して、最終の論理エリアでないと判断するときには、ステップ８に進んで、変数ｊの指すｊ番目のテーブルの論理エリアを１つ進めて、この論理エリアをジョイン対象として位置付ける。すなわち、図３の例で説明するならば、この時点では、ステップ７の判断時にテーブルＴ１の論理エリア＃１が選択されているので、ステップ８に進んで、論理エリアを論理エリア＃２に進めてジョイン対象として位置付けるのである。
【００２９】
続いて、ステップ９で、変数ｋに変数ｊの値をセットし、続くステップ１０で、変数ｋの値が“１”であるか否かを判断して、変数ｋの値が“１”であるときには、ステップ５に戻っていくことで、ステップ５でのジョイン処理を繰り返していくことになる。すなわち、図３の例で説明するならば、最初に、ステップ２の処理に従ってジョイン対象として位置付けられたテーブルＴ２の論理エリア＃Ａと、ステップ８の処理に従ってジョイン対象として位置付けられたテーブルＴ１の論理エリア＃２との間で、Ｂ+ treeインデックスを使いレコードのソート処理を行うことなくジョイン処理を行い、次に、テーブルＴ２の論理エリア＃Ａと、ステップ８の処理に従って更に１つ進められたテーブルＴ１の論理エリア＃３との間で、Ｂ+ treeインデックスを使いレコードのソート処理を行うことなくジョイン処理を行っていくのである。
【００３０】
ステップ８の処理に従って論理エリアを１つずつ進めていくと、ステップ７で、変数ｊの指すｊ番目のテーブルの最終の論理エリアになることを判断するので、このときには、ステップ１１に進んで、変数ｊの値を１つカウントアップし、続くステップ１２で、変数ｊの値が変数ｉの値よりも大きくなったか否かを判断して、大きくないときには、ステップ２に戻っていく。すなわち、図３の例で説明するならば、変数ｊの値を“２”にセットすることで、変数ｊがテーブルＴ２を指すようにセットするのである。
【００３１】
このようにしてステップ７に戻ると、ステップ７で、変数ｊの指すｊ番目のテーブルの最終の論理エリアになったのか否かを判断して、最終の論理エリアでないと判断するときには、ステップ８に進んで、変数ｊの指すｊ番目のテーブルの論理エリアを１つ進めて、この論理エリアをジョイン対象として位置付けるとともに、続くステップ９で、変数ｋに変数ｊの値をセットする。すなわち、図３の例で説明するならば、テーブルＴ２の論理エリアを論理エリア＃Ａから論理エリア＃Ｂに進めて、変数ｋに変数ｊの値である“２”をセットするのである。
【００３２】
ステップ１０で、変数ｋの値が“１”でなくなることを判断すると、ステップ１３に進んで、変数ｋの値を１つカウントダウンし、続くステップ１４で、変数ｋの示すｋ番目のテーブルの論理エリアを先頭のものに戻してジョイン対象として位置付けてから、ステップ１０に戻っていく。すなわち、図３の例で説明するならば、変数ｋに“１”をセットするとともに、変数ｋの指すテーブルＴ１の先頭の論理エリア＃１をジョイン対象として位置付けてから、ステップ１０に戻っていくのである。
【００３３】
このようにしてステップ１０に戻ると、再び変数ｋの値が“１”であることを判断して、ステップ５に戻っていくことで、ステップ５でのジョイン処理を繰り返していくことになる。すなわち、図３の例で説明するならば、最初に、ステップ８の処理に従ってジョイン対象として位置付けられたテーブルＴ２の論理エリア＃Ｂと、ステップ１４の処理に従ってジョイン対象として位置付けられたテーブルＴ１の論理エリア＃１との間で、Ｂ+ treeインデックスを使いレコードのソート処理を行うことなくジョイン処理を行い、次に、テーブルＴ２の論理エリア＃Ｂと、ステップ８の処理に従って更に１つ進められたテーブルＴ１の論理エリア＃２との間で、Ｂ+ treeインデックスを使いレコードのソート処理を行うことなくジョイン処理を行い、続いて、テーブルＴ２の論理エリア＃Ｂと、ステップ８の処理に従って更に１つ進められたテーブルＴ１の論理エリア＃３との間で、Ｂ+ treeインデックスを使いレコードのソート処理を行うことなくジョイン処理を行っていくのである。
【００３４】
このように検索処理を実行していくと、ステップ７で、変数ｊの指すｊ番目のテーブル（テーブルＴ１である）の最終の論理エリアになることを判断するので、このときには、ステップ１１に進んで、変数ｊの値を１つカウントアップし、続くステップ１２で、変数ｊの値が変数ｉの値よりも大きくなったことを判断して処理を終了する。
【００３５】
このようにして、本発明に従うと、リレーショナルデータベースシステム１がレコードを複数の論理エリアに分割格納するテーブル構成に従って管理するという構成を採るときにあって、レコードへのポインタとそのレコードの持つキー値とをリーフ部データとしてキー値の大きさの順に管理するインデックスを使ってジョイン処理を実行することができるようになることから、複数の論理エリアに跨がったレコードのソートを行うことなくジョイン処理を実行することができるのである。
【００３６】
【発明の効果】
以上説明したように、本発明によれば、リレーショナルデータベースシステムがレコードを複数の論理エリアに分割格納するテーブル構成に従って管理するという構成を採るときにあって、インデックスを使ってジョイン処理を実行することができるようにする構成を採るものであることから、複数の論理エリアに跨がったレコードのソートを行うことなくジョイン処理を実行することができるようになるので、高速にジョイン処理を実行できるようになる。
【図面の簡単な説明】
【図１】  本発明の原理構成図である。
【図２】  本発明に係るジョイン処理の処理フローの一実施例である。
【図３】  本発明に係るジョイン処理の一例である。
【図４】  ２つのテーブルを管理するリレーショナルデータベースシステムの一例である。
【符号の説明】
１  リレーショナルデータベースシステム
２  テーブル
３  テーブル
４  論理エリア
５  論理エリア
６  管理手段
７  決定手段
８  ジョイン検索手段
９  結果テーブル
【図１】
0003824091.tif 000002
【図２】
0003824091.tif 000003
【図３】
0003824091.tif 000004
【図４】
0003824091.tif 000005