JP2004110219A - データ処理システム及びジョイン処理方法 - Google Patents
データ処理システム及びジョイン処理方法 Download PDFInfo
- Publication number
- JP2004110219A JP2004110219A JP2002269373A JP2002269373A JP2004110219A JP 2004110219 A JP2004110219 A JP 2004110219A JP 2002269373 A JP2002269373 A JP 2002269373A JP 2002269373 A JP2002269373 A JP 2002269373A JP 2004110219 A JP2004110219 A JP 2004110219A
- Authority
- JP
- Japan
- Prior art keywords
- column
- index
- join
- query
- record
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
- G06F16/24544—Join order optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24547—Optimisations to support specific applications; Extensibility of optimisers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Operations Research (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】(1)スタースキーマのジョインを効率よく実行する。(2)処理性能とデータベースメンテナンスコストとのバランスを制御する機構を提供する。
【解決手段】ファクト表105のカラム値から対応するレコードを引くインデックスの一つ(103)と、ディメンジョン表104のカラム値から対応するレコードを引くインデックスの一つ(102)を少なくとも含む複数インデックスの組合せを定義する仮想連結インデックス101をデータベース中に記憶し、表のジョインを要する問合せの処理の際に対応する仮想連結インデックス101が示すインデックス102、103を順次アクセスしてジョイン処理を実行する。
【選択図】 図1
【解決手段】ファクト表105のカラム値から対応するレコードを引くインデックスの一つ(103)と、ディメンジョン表104のカラム値から対応するレコードを引くインデックスの一つ(102)を少なくとも含む複数インデックスの組合せを定義する仮想連結インデックス101をデータベース中に記憶し、表のジョインを要する問合せの処理の際に対応する仮想連結インデックス101が示すインデックス102、103を順次アクセスしてジョイン処理を実行する。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、データベースシステムのジョイン処理に係り、特にそのためのインデックス定義方法、およびそのインデックスを用いたジョイン処理の実行方法に関する。
【0002】
【従来の技術】
業務システムのデータを格納するデータベースを設計する際に、日々追加される売上データ(レシート情報)を格納するファクト表(テーブル)と、該ファクト表の各々の属性を定義するディメンジョン表で構成されるスタースキーマを用いることが多い。スタースキーマは前記ファクト表を中心として、該ファクト表からリンクされる複数のディメンジョン表がスター型(星型)を形成することにその名前の由来があり、例えばHector Garcia−Molina,Jeffrey D. Ullman,Jennifer Widom著“Database System Implementation”,PrenticeHall,ISBN 0130402648,11.3.3節(文献1)にその構造および特徴が開示されている。
図9を用いてスタースキーマの特徴を簡単に説明する。図9に示した例では、スタースキーマは1つのファクト表FT(901)と、複数のディメンジョン表DT1〜DT4(902〜905)で構成されている。ファクト表FT上のカラムc11〜c41は、それぞれディメンジョン表DT1〜DT4上の同名のカラムに対応し、ディメンジョン表、ファクト表間で主キー−外部キーの関係となっているのが普通である。
好適な実現例としては、ディメンジョン表DT1が製品を管理するデータを格納する表、そしてファクト表FTが製品の各店舗での売上を管理するレシートデータを格納する表である構成があげられる。DT1が製品を管理するデータである場合、例えばc11は製品を一意に識別する製品IDで、c12以降のカラムに製品名や製品発表日などの各製品の属性が続く。製品を管理するDT1上のデータは、新しい製品が開発され、販売されるタイミングで更新される。これに対して、ファクト表FTは製品の各店舗での売上を管理するレシートデータであるので、情報であるとすると、店舗で1つ製品が売れるたびにFTに情報が追加されることとなり、その更新頻度はDT1と比較して非常に高く、しかもその規模は非常に大きくなる。
実業務で蓄積されたデータに対して各種の解析処理を施し、経営戦略等の有用な情報を抽出しようとする、情報系システムが多くの企業で用いられつつある。例えば、地区A内の各店舗での月単位の製品別売上を解析することにより、季節ごとの各店舗での販売戦略を検討するなど、販売データを経営戦略に直接リンクすることによって、意思決定を効率化するというのが1つの好適な例である。
実業務データを格納するスキーマの形態として、スタースキーマが用いられることが多いことから、スタースキーマを対象とした場合の解析処理の効率向上が課題となっていた。
ところが、例えば前述の製品別の売上解析を考えた場合、製品データを蓄積するディメンジョン表DT1と、店舗データを蓄積するディメンジョン表DT2と、レシートデータを蓄積するファクト表FTを突合せて処理する必要がある。ここでの表同士の突合せ処理とは、突合せ対象のカラムとその突合せ条件を指定し、条件に合致したレコード(行)同士を連結して出力する処理を指す。この処理はデータベースシステムではジョイン処理と呼ばれ、非常に処理コストが高い。しかも、スタースキーマでのジョイン処理は、(1)各々のディメンジョン表はファクト表のみとしかジョインできないこと、(2)ファクト表が巨大であることから、効率的な処理が難しかった。
例えば、製品データを蓄積するディメンジョン表DT1と、店舗データを蓄積するディメンジョン表DT2と、売上データを蓄積するファクト表FTの3表のジョイン処理を行うためには、直感的に以下の3つの方法が考えられる。
(1)第1のディメンジョン表DT1とファクト表FT、および第2のディメンジョン表DT2と前記ファクト表FTをそれぞれジョインし、さらにその結果同士をジョインして最終結果を生成する方法。
(2)第1のディメンジョン表とファクト表FTをジョインし、該ジョイン結果と第2のディメンジョン表をジョインする方法。
(3)第1のディメンジョン表と第2のディメンジョン表の直積を生成し、該直積結果とファクト表を結合する方法。
ファクト表は通常非常にサイズが大きい。(1)および(2)の方法では、第1のディメンジョン表とファクト表のジョイン結果である中間結果が非常に大きくなってしまう場合に、該中間結果同士、もしくは該中間結果と他のディメンジョン表のジョイン処理コストが大きくなってしまい、性能が極端に低下してしまうという問題があった。
一方(3)の方法は、直積を生成するディメンジョン表の数が少なく、しかも該ディメンジョン表に対する絞込み条件により、ディメンジョン表上のジョイン対象の行数が少なくなった場合には、該直積結果とファクト表を1回だけジョインすればよいため効率が良い。しかしながら、ジョイン対象のディメンジョン表数、もしくはサイズが大きくなると直積は急激に大きくなるため、性能が極端に悪化するという問題があった。
米国特許5864842号(文献2)は、ファクト表と該ファクト表にジョインされる複数のディメンジョン表間のジョイン実行方式として、Hash Star Join Operation(以下、HSJO)を開示している。HSJOはファクト表をジョインカラムでハッシュ分割し、複数のディメンジョン表を1度にジョインするという特徴がある。ところが、この方式ではファクト表のジョインカラムでのハッシュ分割処理時にファクト表のスキャンを行う必要があるため、ファクト表が巨大で1回のスキャン処理も不可となる条件下では使用できないという問題がある。
米国特許US5960428号(文献3)は、ファクト表のジョインカラムにインデックスがあり、かつディメンジョン表が条件によって強く絞り込まれる場合に有効なジョイン方式を開示している。このジョイン方式では、絞り込んだディメンジョン表のジョインカラムを取り出し、その値でファクト表のインデックスをひいてレコードIDを取り出し、該操作をディメンジョン表毎に繰り返して、全ディメンジョン表の条件を満足するレコードIDの組を作成した後に、ディメンジョン表と再度ジョインする。本方式では、ディメンジョン表の結合対象カラムの各値に対してその都度ファクト表のインデックスを引く必要がある点、およびファクト表を絞り込んだ後に絞込みを行ったファクト表とディメンジョン表を再度ジョインする必要がある点で性能改善の余地が残されている。
米国特許5848408号(文献4)は、ディメンジョン表から抽出した値でファクト表上のビットマップインデックスを利用できるように問合せを変換する、Star Transformation方式を開示している。この方式ではファクト表上のビットマップインデックスの存在を前提としており、適用箇所が限定されてしまうという問題、そしてディメンジョン表の更新が起こった場合の前記ビットマップインデックスのメンテナンスコストが非常に高いという問題がある。
“Administrator”s Guide Informix Red Brick Decision Server, Version 6.1”の4−6〜4−8ページ(文献5)にはスターインデックス機構が開示される。スターインデックスとは、主キーと外部キー間の参照を持つ表の間に作成するインデックスであり、ディメンジョン表のカラムの値を用いてファクト表の行を検索することができる。このスターインデックスは、ディメンジョン表とファクト表の間に主キー−外部キー制約を必要とすることと、ファクト表の更新に対するメンテナンスコストが高いという問題がある。
【0003】
【発明が解決しようとする課題】
業務データを有効活用するための解析処理を効率よく行うために、スタースキーマでのジョイン処理を効率よく実行することが課題となっていた。さらに、データの追加および更新に伴うデータベースメンテナンスコストを削減することも課題となっていた。
本発明の第1の目的は、スタースキーマのジョインを効率よく実行することである。また、本発明の第2の目的は、性能とデータベースメンテナンスコストとのバランスを調整する機構を提供することである。
【0004】
【課題を解決するための手段】
本発明の代表的な実施の形態では、スタースキーマのデータベースを構成するファクト表とディメンジョン表のカラムに対応してそれぞれ設けられ、それぞれのカラム値から対応するレコードを引くためのインデックスの中から、表のジョインを要する問合せ処理の際に順次アクセスすべきファクト表のインデックスとディメンジョン表のインデックスとの組合せを仮想連結インデックスとして定義してデータベースに記憶し、問合せの処理時に対応する仮想連結インデックスがあれば、その仮想連結インデックスが示す複数のインデックスを順次アクセスしてその問合せの条件に合致するファクト表のレコードを特定することによりジョイン処理を実行する。
仮想結合インデックスは典型的には各ディメンジョン表の各カラム毎に定義することになる。実際にアクセスする実インデックスとは別に、実インデックスの組合せを定義する仮想結合インデックスを記憶したことでデータベースの更新時の処理の低減の効果がある。つまり、ファクト表の更新もしくはレコード追加に対してはファクト表のカラムの実インデックスのみを更新すれば良く、ディメンジョン表のインデックスの内容も、仮想結合インデックスの内容も更新する必要がない。
また別の実施の形態では、上記の仮想結合インデックスを問合せの処理に先立ち指定したカラム値の範囲に限って実体化するステップを有する。つまり指定した範囲内の各カラム値について仮想結合インデックスの示すディメンジョン表のインデックスのアクセス、その結果を用いたファクト表のインデックスのアクセスを実行し、各カラム値に対応するファクト表のレコードIDのリストを予め作成して記憶する。問合せ処理時に問合せの指定するカラム値が上記指定した範囲内にあれば、実体化した連結インデックスのアクセスのみ問合せの条件に合致するファクト表のレコードをポイントすることができる。よって、スタースキーマのデータべースの問合せ処理が極めて高速になる。またカラム値の範囲を限定した部分的な実体化であるため、データの更新追加時のインデックスメンテナンスのコストを小さくできる。つまり、ファクト表もしくはディメンジョン表の更新頻度、及びジョイン処理に必要とされる性能に応じて、仮想連結インデックスの実体化の割合を変化させ、データベースの処理性能とデータベースメンテナンスコストのバランスを適切に制御することが可能となる。
【0005】
【発明の実施の形態】
仮想連結インデックスの実施の形態について説明する。図1の仮想連結インデックスIdc2_fc1(101)は、ディメンジョン表DT1(104)のカラムc12の値から、ファクト表FT(105)のレコードIDを引くことができるインデックスである。例えば、DT1.c12=4という条件でIdc2_fc1を引くと、FT上のftid=3のレコードをアクセスすることができる。本発明の仮想連結インデックスは、ディメンジョン表およびファクト表上の既存のインデックスを組合せて定義する。この定義の好適な実施例として、図2に仮想連結インデックス定義文を示す(201)。該定義文では、前記仮想連結インデックスIdc2_fc1を、ディメンジョン表DT1上のインデックスIdc2(102)とファクト表上のインデックスIfc1(103)の組合せで定義している。
図11は実施例のシステム構成を示す。データベース1107は
データベース管理システム(以下DBMSと略称する)1101に管理される。外部ネットワーク経由でネットワークインターフェース部110に入力するデータベースへの問合せは問合せ処理部1103に導かれる。問合せ処理部1103は、問い合わせ最適化モジュール110を含み、ここで最適化された問合せが問合せ実行モジュール1105により実行される。上述の定義文で定義された仮想連結インデックスIdc2_fc1は、データベース1107中にテーブル1109として格納され、問合せ処理で利用される。
仮想連結インデックスの定義された仮想連結インデックスのDBMS内での実現方式について、DT1.c11=FT.c11というジョイン条件でファクト表とディメンジョン表をジョインする場合を例にあげて、図3および図11を用いて説明する。説明を簡単にするため、ディメンジョン表内の1レコードであるDT1.c12=4をジョインする場合を説明する。前記仮想連結インデックスIdc2_fc1に対してDT1.c12=4という条件でアクセスした場合、該アクセスはDBMS内の問合せ最適化モジュール1104によって、ディメンジョン表DT1(303)のインデックスIdc2(301)と、ファクト表FTのインデックスIfc1(302)へのアクセスに変換される。
一般に、最適化時に考慮されるインデックスの組合せは、組合せ爆発による最適化実行時間を押さえるために、その考慮対象数が制限されてしまうため、最適な組合せを見つけることは困難である。それに対して、本発明の仮想連結インデックス定義を用いることにより、前記最適化モジュールは適切なインデックスを優先的に選択することができ、実行時間短縮のみならず最適化時間をも短縮することができる。
前記最適化モジュールが決定したインデックスの組合せに従って、問合せ実行モジュール1105が実際にインデックスアクセスを行って問合せを処理する。いま、Idc2に対してDT1.c12=4という条件でアクセスすると、ディメンジョン表DT1では、カラムc12の値が4のレコード305がポイントされ、ファクト表FTとのジョインの対象となるディメンジョン表のカラム(以下、結合カラム)c11の値として2を取得する。問合せ実行モジュールはc11=2の値を用いてファクト表のインデックスIfc1にアクセスし、ファクト表レコードID(ftid)=3のレコード306を取得する。
以上のステップで、仮想連結インデックスの動作について説明したが、前記仮想連結インデックス利用のファクト表のレコード取得では、1回のディメンジョン表のインデックスIdc2へのアクセス、ディメンジョン表のレコード305取得のためのデータページへのアクセス、ファクト表上のインデックスIfc1へのアクセス、そしてファクト表のレコード306取得のためのデータページアクセスが必要であった。
ディメンジョン表、ファクト表の更新頻度が小さく、インデックスメンテナンスコストを考慮しなくてもよい場合、もしくはシステム設計の第1の目的が参照性能の向上である場合には、前記仮想連結インデックスの実体化を行うことによって、仮想連結インデックスアクセスによるファクト表行取得のコストを削減することができる。仮想連結インデックスの実体化とは、仮想連結インデックスに連結対象と定義されたインデックスを、問合せ実行に先立って順次アクセスし、その結果を実際にデータとしてDBMS内に格納しておくことであり、文献5のスターインデックスに相当する。実体化した仮想連結インデックスを用いれば、ファクト表のレコードをポイントするのは仮想連結インデックスに対する1回のアクセスのみでよく、実行効率を高めることができる。
但し、実体化を行うとデータの変更に伴うインデックスメンテナンスコストが著しく増大する上に、実体化したインデックスを格納するディスクスペースも必要となるという問題がある。そこで、本発明では、図5に示すように仮想連結インデックスの部分的な実体化を可能とする。図5の仮想連結インデックスIdc2_fc1(501)では、全体のうち横線の付加された左側半分が実体化されていることを示しており、実体化された範囲のインデックスへのアクセスでは1回のアクセスでファクト表のレコードをポイントすることができる。仮想連結インデックスの実体化の定義例を図4の401に示す。401では、仮想連結インデックスIfc2_fc1のうち、DT1.c12>2を満たす部分のみを実体化する。
ここで上記の仮想連結インデックスの実体化の定義例に沿って、実体化の具体的手順を述べる。上記定義例では実体化の限定範囲がディメンジョン表DT1のカラムc12が2より大の範囲なので、カラムc12のインデックス301を参照して限定範囲内の全てのカラム値(図3の例ではカラム値3と4)についてインデックス301を順次引く。これによりそれぞれ特定されたレコードから結合カラムc11のカラム値1と2を得る。これら結合カラムのカラム値をそれぞれ用いて仮想連結インデックスで定義する結合されるべきインデックス302を引き、ファクト表のレコードをそれぞれ特定し、これらレコードからファクト表のレコードIDであるftidの値を読出す。読み出したftid の値を、先の範囲限定されたディメンジョン表のカラム値のそれぞれに対応づけたファクト表のレコードIDリストの形で記憶する。図3の例では、ディメンジョン表のカラムc12のカラム値3に対応してftid=1とftid=2が、またカラム値4に対応してftid=3が記憶される。
このように仮想連結インデックスを予め部分的に実体化した構成を採用した場合は、仮想連結インデックスを利用可能な問合せの処理の際に、その問合せが指定するカラム値が実体化定義の限定範囲内か否かを判定する。限定範囲内なら仮想連結インデックスが指定する個々のインデックスの順次アクセスに替え、実体化した連結インデックスの一回のアクセスで、つまり記憶したファクト表のレコードIDリストの読み出しでレコードのポイントが可能となる。
次に、本発明による仮想連結インデックスを用いたジョイン処理方式を図8のフローチャートを用いて説明する。本フローチャートで示した処理は、DBMS内の問合せ処理部1103内の問合せ最適化モジュール1104、および該問合せ処理部内の問合せ実行モジュール1105で行われるのが普通であるが、実装の方式によりこれらとは異なるモジュールで実行しても差し支えない。以下の実施例では、実行の主体を前記問合せ処理部とする。
ジョイン処理の最初のステップでは、前記問合せ処理部が仮想連結インデックスの利用可否をチェックする(802)。仮想連結インデックスの利用が不可と指定されている場合(ステップ802でYesが選択された場合)には、仮想連結インデックスを用いない従来のジョイン処理を実行し(ステップ809)、ジョイン処理を終了する(ステップ810)。利用可能な仮想連結インデックスが存在する場合には、必ず該インデックスの利用を考慮するという場合には、ステップ802は省略することも可能である。
仮想連結インデックスの利用を考慮する場合(ステップ802でNoが選択された場合)、前記問合せ処理部は問合せ処理で利用が可能な仮想連結インデックスの存在の有無をチェックする(ステップ803)。利用可能な仮想連結インデックスが存在しない場合(ステップ803でNoが選択された場合)には、仮想連結インデックスを用いない従来のジョイン処理を実行し(ステップ809)、ジョイン処理を終了する(ステップ810)。
利用可能な仮想連結インデックスが存在する場合(ステップ803でYesが選択された場合)、ファクト表とディメンジョン表の結合カラムが、ディメンジョン表側のキーとなっていることを保証できるか否かをチェックする(ステップ804)。ここで、結合カラムとはジョインされる2つの表で値の突合せが行われるカラムを指す。例えば、図5の問合せ506では、ジョイン条件はDT1.c11=FT.c11であるので、結合カラムはDT1.c11およびFT.c11となる。また、カラムcが表Tのキーとなっているとは、カラムcの値が表T中でユニークであること、すなわち同じカラムcには同じ値が現れないことを表す。例えば、図5のディメンジョン表DT1ではカラムc11の値はDT1中で全て異なるため、キーとなっているといえる。制約チェック機構を備えるDBMSでは、表Tのカラムcにユニーク制約を付与し、チェック機構を有効とすることで、カラムcがキーとなっていることを保証できる。
ディメンジョン表の結合カラムがキーとなっていることを保証できる場合(ステップ804でYesが選択された場合)には、本ジョイン処理以降の問合せ処理にディメンジョン表の結合カラム以外のカラム値が必要か否かをチェックする(ステップ805)。例えば図5の問合せQ1(506)は、SELECT句にDT1.c12が指定されているため、問合せ処理に結合カラム以外のカラム値が必要な場合である。一方、同図の問合せQ2(507)は、SELECT句にディメンジョン表のカラムは指定されておらず、ジョイン処理以降の問合せ処理でも該カラムを必要としないため、問合せ処理には結合カラムのみがあればよい場合である。ある処理以降にどのカラムが必要となるかのチェック機構は、問合せに現れるカラムをチェックすることで簡単に実現でき、多くの商用DBMSでサポートされている公知技術である。
問合せ処理にディメンジョン表の結合カラムのみが必要な場合(ステップ805でNoが選択された場合)には、仮想連結インデックス利用により、ファクト表レコードIDリストを生成する(ステップ806)。ファクト表レコードIDリストとは の604に示すように、ジョイン条件を満足するファクト表のレコードIDのみを取り出したリストを指す。例えば問合せが図5のQ2(507)の場合には、該ファクト表レコードIDリストには3のみが格納される。
ディメンジョン表の結合カラムがキーであることが保証できない場合(ステップ804でNoが選択された場合)、もしくは問合せ処理にディメンジョン表の結合カラム以外のカラムが必要な場合(ステップ805でYesが選択された場合)には、仮想連結インデックス利用およびディメンジョン表アクセスにより、カラムマッピングテーブルを生成する(ステップ811)。カラムマッピングテーブルとは図7の704に示すように、ジョイン条件を満足するファクト表のレコードID、結合カラム、そして問合せ処理に必要な結合カラム以外のカラムを格納する表である。問合せが図5のQ1(506)である場合には、カラムマッピングテーブルは、ファクト表レコードIDであるftid、結合カラムc11、および問合せ処理で必要となるカラムc12で構成され、格納されるレコードは{ftid,c11,c12}={(3,2,4)}の1レコードとなる。
ジョイン対象の各ディメンジョン表に対して、ファクト表レコードIDリスト、もしくはカラムマッピングテーブルを生成した後、問合せ処理部は、問合せの全ての条件を満足するファクト表レコードID集合を生成する(ステップ807)。本処理ステップを図10に基づいて説明する。
図10に示す環境では、データベースはファクト表FT(1009)と2つのディメンジョン表DT1(1003)およびDT2(1007)の計3つの表で構成されている。該データベースに対して、問合せQ3(1012)が発行されたとすると、該問合せを処理するためには、FT、DT1、およびDT2のジョイン処理が必要となる。FTとDT1、FTとDT2の結合カラムはそれぞれ、c11、c21である。まずDT1とFTのジョインに関しては、問合せQ3でジョイン処理以降にDT1の結合カラム以外のカラムを必要としないため、Q3のWHERE句に指定されているFT1.c12=4の条件で仮想連結インデックスIdc2_fc1(1001)を引き、ファクト表レコードIDリスト1004を生成する。次に、DT2とFTのジョインに関しては、Q3でSELECT句に結合カラム以外のDT2.c23が指定されているため、Q3のWHERE句に指定されているDT2.c23<3の条件で仮想連結インデックスIdc3_fc2(1005)を引き、カラムマッピングテーブル1008を生成する。Q3ではWHERE句に指定された条件はANDで結合されているため、前記ファクト表レコードIDリスト(1004)と、前記カラムマッピングテーブル(1008)から抽出したレコードIDのリストをAND条件で結合し(1010)、問合せの条件を満足するファクト表レコードID集合1011を生成する。図8に戻って、問合せの条件を満足するファクト表レコードID集合が生成された後、処理中の問合せでカラムマッピングテーブルを作成したか否かをチェックする(ステップ808)。カラムマッピングテーブルが存在しない場合(ステップ808でNoが選択された場合)、前記問合せの結果はファクト表のみで生成できるため、ステップ807で生成したファクト表レコードIDリストに対応するファクト表のレコードを取り出して結果を生成し(ステップ814)、ジョイン処理を終了する(813)。
カラムマッピングテーブルが存在する場合(ステップ808でYesが選択された場合)、ステップ807で生成したファクト表レコードIDリストに対応するファクト表のレコードを取り出し、カラムマッピングテーブルとの突合せにより結果を生成する(ステップ812)。例えば図10の例では、問合せの条件を満足するファクト表レコードID集合ftid={3}であるので、該ftidの値でファクト表FTのインデックスIftを引いてftid=3であるレコード(1013)にアクセスし、該レコードからファクト表から問合せQ3のSELECT句に指定されており、問合せ処理に必要となっているカラムFT.fcの値30000を取り出す。同様にして、カラムマッピングテーブル(1008)でftid=3のレコードにアクセスし、Q3のSELECT句に指定されており、問合せ処理に必要となっているカラムDT2.c23の値2を取り出す。該処理ステップにより、問合せQ3の結果として、{FT.fc1,DT2.c23}={(30000,2)}を生成することができる。
本実施例では、ファクト表レコードIDをリストとして保持する方法を示したが、ビットマップとして保持する方法でも差し支えない。また本実施例では、カラムマッピングテーブルを作成するディメンジョン表に関してはファクト表レコードIDリストを作成しない方法を示したが、該ディメンジョン表に対してカラムマッピングテーブルとファクト表レコードIDリストの両方を作成してももちろん差し支えない。さらに、該ファクト表レコードIDリストおよびカラムマッピングテーブルは、メモリ上に一時的に作成しても、データベース(1107)内にテーブル(1108)として作成しても差し支えない。
【0006】
【発明の効果】
本発明を用いることにより、スタースキーマのジョイン処理の効率を高めることができ、さらに加えてデータベースの処理性能とデータベースメンテナンスコストのバランスを適切に制御することが可能となる。
【図面の簡単な説明】
【図1】本発明における仮想連結インデックスを示す図。
【図2】本発明における仮想連結インデックス定義例を示す図。
【図3】本発明における仮想連結インデックス利用時のデータアクセスパスを示す図。
【図4】本発明における仮想連結インデックスの実体化指定例を示す図。
【図5】本発明における仮想連結インデックスの部分的実体化および問合せ例を示す図。
【図6】本発明における仮想連結インデックス利用によるファクト表レコードIDリスト生成例を示す図。
【図7】本発明における仮想連結インデックス利用によるカラムマッピングテーブル生成例を示す図。
【図8】本発明におけるジョイン処理ステップを示すフローチャート。
【図9】スタースキーマ説明のための例を示す図。
【図10】本発明における仮想連結インデックス利用のジョイン処理ステップを示す図。
【図11】本発明のDBMS構成を説明するための図。
【符号の説明】
101、501、601、701、1001、1005…仮想連結インデックス、
102、103、301、302、502、503、602、702、1002、1006…インデックス、
104、303、504、603、703、902、903、904、905、1003、1007…ディメンジョン表、
105、304、505、901、1009…ファクト表、
604、1004…ファクト表レコードIDリスト、
704、1008…カラムマッピングテーブル、
1108、1109…テーブル。
【発明の属する技術分野】
本発明は、データベースシステムのジョイン処理に係り、特にそのためのインデックス定義方法、およびそのインデックスを用いたジョイン処理の実行方法に関する。
【0002】
【従来の技術】
業務システムのデータを格納するデータベースを設計する際に、日々追加される売上データ(レシート情報)を格納するファクト表(テーブル)と、該ファクト表の各々の属性を定義するディメンジョン表で構成されるスタースキーマを用いることが多い。スタースキーマは前記ファクト表を中心として、該ファクト表からリンクされる複数のディメンジョン表がスター型(星型)を形成することにその名前の由来があり、例えばHector Garcia−Molina,Jeffrey D. Ullman,Jennifer Widom著“Database System Implementation”,PrenticeHall,ISBN 0130402648,11.3.3節(文献1)にその構造および特徴が開示されている。
図9を用いてスタースキーマの特徴を簡単に説明する。図9に示した例では、スタースキーマは1つのファクト表FT(901)と、複数のディメンジョン表DT1〜DT4(902〜905)で構成されている。ファクト表FT上のカラムc11〜c41は、それぞれディメンジョン表DT1〜DT4上の同名のカラムに対応し、ディメンジョン表、ファクト表間で主キー−外部キーの関係となっているのが普通である。
好適な実現例としては、ディメンジョン表DT1が製品を管理するデータを格納する表、そしてファクト表FTが製品の各店舗での売上を管理するレシートデータを格納する表である構成があげられる。DT1が製品を管理するデータである場合、例えばc11は製品を一意に識別する製品IDで、c12以降のカラムに製品名や製品発表日などの各製品の属性が続く。製品を管理するDT1上のデータは、新しい製品が開発され、販売されるタイミングで更新される。これに対して、ファクト表FTは製品の各店舗での売上を管理するレシートデータであるので、情報であるとすると、店舗で1つ製品が売れるたびにFTに情報が追加されることとなり、その更新頻度はDT1と比較して非常に高く、しかもその規模は非常に大きくなる。
実業務で蓄積されたデータに対して各種の解析処理を施し、経営戦略等の有用な情報を抽出しようとする、情報系システムが多くの企業で用いられつつある。例えば、地区A内の各店舗での月単位の製品別売上を解析することにより、季節ごとの各店舗での販売戦略を検討するなど、販売データを経営戦略に直接リンクすることによって、意思決定を効率化するというのが1つの好適な例である。
実業務データを格納するスキーマの形態として、スタースキーマが用いられることが多いことから、スタースキーマを対象とした場合の解析処理の効率向上が課題となっていた。
ところが、例えば前述の製品別の売上解析を考えた場合、製品データを蓄積するディメンジョン表DT1と、店舗データを蓄積するディメンジョン表DT2と、レシートデータを蓄積するファクト表FTを突合せて処理する必要がある。ここでの表同士の突合せ処理とは、突合せ対象のカラムとその突合せ条件を指定し、条件に合致したレコード(行)同士を連結して出力する処理を指す。この処理はデータベースシステムではジョイン処理と呼ばれ、非常に処理コストが高い。しかも、スタースキーマでのジョイン処理は、(1)各々のディメンジョン表はファクト表のみとしかジョインできないこと、(2)ファクト表が巨大であることから、効率的な処理が難しかった。
例えば、製品データを蓄積するディメンジョン表DT1と、店舗データを蓄積するディメンジョン表DT2と、売上データを蓄積するファクト表FTの3表のジョイン処理を行うためには、直感的に以下の3つの方法が考えられる。
(1)第1のディメンジョン表DT1とファクト表FT、および第2のディメンジョン表DT2と前記ファクト表FTをそれぞれジョインし、さらにその結果同士をジョインして最終結果を生成する方法。
(2)第1のディメンジョン表とファクト表FTをジョインし、該ジョイン結果と第2のディメンジョン表をジョインする方法。
(3)第1のディメンジョン表と第2のディメンジョン表の直積を生成し、該直積結果とファクト表を結合する方法。
ファクト表は通常非常にサイズが大きい。(1)および(2)の方法では、第1のディメンジョン表とファクト表のジョイン結果である中間結果が非常に大きくなってしまう場合に、該中間結果同士、もしくは該中間結果と他のディメンジョン表のジョイン処理コストが大きくなってしまい、性能が極端に低下してしまうという問題があった。
一方(3)の方法は、直積を生成するディメンジョン表の数が少なく、しかも該ディメンジョン表に対する絞込み条件により、ディメンジョン表上のジョイン対象の行数が少なくなった場合には、該直積結果とファクト表を1回だけジョインすればよいため効率が良い。しかしながら、ジョイン対象のディメンジョン表数、もしくはサイズが大きくなると直積は急激に大きくなるため、性能が極端に悪化するという問題があった。
米国特許5864842号(文献2)は、ファクト表と該ファクト表にジョインされる複数のディメンジョン表間のジョイン実行方式として、Hash Star Join Operation(以下、HSJO)を開示している。HSJOはファクト表をジョインカラムでハッシュ分割し、複数のディメンジョン表を1度にジョインするという特徴がある。ところが、この方式ではファクト表のジョインカラムでのハッシュ分割処理時にファクト表のスキャンを行う必要があるため、ファクト表が巨大で1回のスキャン処理も不可となる条件下では使用できないという問題がある。
米国特許US5960428号(文献3)は、ファクト表のジョインカラムにインデックスがあり、かつディメンジョン表が条件によって強く絞り込まれる場合に有効なジョイン方式を開示している。このジョイン方式では、絞り込んだディメンジョン表のジョインカラムを取り出し、その値でファクト表のインデックスをひいてレコードIDを取り出し、該操作をディメンジョン表毎に繰り返して、全ディメンジョン表の条件を満足するレコードIDの組を作成した後に、ディメンジョン表と再度ジョインする。本方式では、ディメンジョン表の結合対象カラムの各値に対してその都度ファクト表のインデックスを引く必要がある点、およびファクト表を絞り込んだ後に絞込みを行ったファクト表とディメンジョン表を再度ジョインする必要がある点で性能改善の余地が残されている。
米国特許5848408号(文献4)は、ディメンジョン表から抽出した値でファクト表上のビットマップインデックスを利用できるように問合せを変換する、Star Transformation方式を開示している。この方式ではファクト表上のビットマップインデックスの存在を前提としており、適用箇所が限定されてしまうという問題、そしてディメンジョン表の更新が起こった場合の前記ビットマップインデックスのメンテナンスコストが非常に高いという問題がある。
“Administrator”s Guide Informix Red Brick Decision Server, Version 6.1”の4−6〜4−8ページ(文献5)にはスターインデックス機構が開示される。スターインデックスとは、主キーと外部キー間の参照を持つ表の間に作成するインデックスであり、ディメンジョン表のカラムの値を用いてファクト表の行を検索することができる。このスターインデックスは、ディメンジョン表とファクト表の間に主キー−外部キー制約を必要とすることと、ファクト表の更新に対するメンテナンスコストが高いという問題がある。
【0003】
【発明が解決しようとする課題】
業務データを有効活用するための解析処理を効率よく行うために、スタースキーマでのジョイン処理を効率よく実行することが課題となっていた。さらに、データの追加および更新に伴うデータベースメンテナンスコストを削減することも課題となっていた。
本発明の第1の目的は、スタースキーマのジョインを効率よく実行することである。また、本発明の第2の目的は、性能とデータベースメンテナンスコストとのバランスを調整する機構を提供することである。
【0004】
【課題を解決するための手段】
本発明の代表的な実施の形態では、スタースキーマのデータベースを構成するファクト表とディメンジョン表のカラムに対応してそれぞれ設けられ、それぞれのカラム値から対応するレコードを引くためのインデックスの中から、表のジョインを要する問合せ処理の際に順次アクセスすべきファクト表のインデックスとディメンジョン表のインデックスとの組合せを仮想連結インデックスとして定義してデータベースに記憶し、問合せの処理時に対応する仮想連結インデックスがあれば、その仮想連結インデックスが示す複数のインデックスを順次アクセスしてその問合せの条件に合致するファクト表のレコードを特定することによりジョイン処理を実行する。
仮想結合インデックスは典型的には各ディメンジョン表の各カラム毎に定義することになる。実際にアクセスする実インデックスとは別に、実インデックスの組合せを定義する仮想結合インデックスを記憶したことでデータベースの更新時の処理の低減の効果がある。つまり、ファクト表の更新もしくはレコード追加に対してはファクト表のカラムの実インデックスのみを更新すれば良く、ディメンジョン表のインデックスの内容も、仮想結合インデックスの内容も更新する必要がない。
また別の実施の形態では、上記の仮想結合インデックスを問合せの処理に先立ち指定したカラム値の範囲に限って実体化するステップを有する。つまり指定した範囲内の各カラム値について仮想結合インデックスの示すディメンジョン表のインデックスのアクセス、その結果を用いたファクト表のインデックスのアクセスを実行し、各カラム値に対応するファクト表のレコードIDのリストを予め作成して記憶する。問合せ処理時に問合せの指定するカラム値が上記指定した範囲内にあれば、実体化した連結インデックスのアクセスのみ問合せの条件に合致するファクト表のレコードをポイントすることができる。よって、スタースキーマのデータべースの問合せ処理が極めて高速になる。またカラム値の範囲を限定した部分的な実体化であるため、データの更新追加時のインデックスメンテナンスのコストを小さくできる。つまり、ファクト表もしくはディメンジョン表の更新頻度、及びジョイン処理に必要とされる性能に応じて、仮想連結インデックスの実体化の割合を変化させ、データベースの処理性能とデータベースメンテナンスコストのバランスを適切に制御することが可能となる。
【0005】
【発明の実施の形態】
仮想連結インデックスの実施の形態について説明する。図1の仮想連結インデックスIdc2_fc1(101)は、ディメンジョン表DT1(104)のカラムc12の値から、ファクト表FT(105)のレコードIDを引くことができるインデックスである。例えば、DT1.c12=4という条件でIdc2_fc1を引くと、FT上のftid=3のレコードをアクセスすることができる。本発明の仮想連結インデックスは、ディメンジョン表およびファクト表上の既存のインデックスを組合せて定義する。この定義の好適な実施例として、図2に仮想連結インデックス定義文を示す(201)。該定義文では、前記仮想連結インデックスIdc2_fc1を、ディメンジョン表DT1上のインデックスIdc2(102)とファクト表上のインデックスIfc1(103)の組合せで定義している。
図11は実施例のシステム構成を示す。データベース1107は
データベース管理システム(以下DBMSと略称する)1101に管理される。外部ネットワーク経由でネットワークインターフェース部110に入力するデータベースへの問合せは問合せ処理部1103に導かれる。問合せ処理部1103は、問い合わせ最適化モジュール110を含み、ここで最適化された問合せが問合せ実行モジュール1105により実行される。上述の定義文で定義された仮想連結インデックスIdc2_fc1は、データベース1107中にテーブル1109として格納され、問合せ処理で利用される。
仮想連結インデックスの定義された仮想連結インデックスのDBMS内での実現方式について、DT1.c11=FT.c11というジョイン条件でファクト表とディメンジョン表をジョインする場合を例にあげて、図3および図11を用いて説明する。説明を簡単にするため、ディメンジョン表内の1レコードであるDT1.c12=4をジョインする場合を説明する。前記仮想連結インデックスIdc2_fc1に対してDT1.c12=4という条件でアクセスした場合、該アクセスはDBMS内の問合せ最適化モジュール1104によって、ディメンジョン表DT1(303)のインデックスIdc2(301)と、ファクト表FTのインデックスIfc1(302)へのアクセスに変換される。
一般に、最適化時に考慮されるインデックスの組合せは、組合せ爆発による最適化実行時間を押さえるために、その考慮対象数が制限されてしまうため、最適な組合せを見つけることは困難である。それに対して、本発明の仮想連結インデックス定義を用いることにより、前記最適化モジュールは適切なインデックスを優先的に選択することができ、実行時間短縮のみならず最適化時間をも短縮することができる。
前記最適化モジュールが決定したインデックスの組合せに従って、問合せ実行モジュール1105が実際にインデックスアクセスを行って問合せを処理する。いま、Idc2に対してDT1.c12=4という条件でアクセスすると、ディメンジョン表DT1では、カラムc12の値が4のレコード305がポイントされ、ファクト表FTとのジョインの対象となるディメンジョン表のカラム(以下、結合カラム)c11の値として2を取得する。問合せ実行モジュールはc11=2の値を用いてファクト表のインデックスIfc1にアクセスし、ファクト表レコードID(ftid)=3のレコード306を取得する。
以上のステップで、仮想連結インデックスの動作について説明したが、前記仮想連結インデックス利用のファクト表のレコード取得では、1回のディメンジョン表のインデックスIdc2へのアクセス、ディメンジョン表のレコード305取得のためのデータページへのアクセス、ファクト表上のインデックスIfc1へのアクセス、そしてファクト表のレコード306取得のためのデータページアクセスが必要であった。
ディメンジョン表、ファクト表の更新頻度が小さく、インデックスメンテナンスコストを考慮しなくてもよい場合、もしくはシステム設計の第1の目的が参照性能の向上である場合には、前記仮想連結インデックスの実体化を行うことによって、仮想連結インデックスアクセスによるファクト表行取得のコストを削減することができる。仮想連結インデックスの実体化とは、仮想連結インデックスに連結対象と定義されたインデックスを、問合せ実行に先立って順次アクセスし、その結果を実際にデータとしてDBMS内に格納しておくことであり、文献5のスターインデックスに相当する。実体化した仮想連結インデックスを用いれば、ファクト表のレコードをポイントするのは仮想連結インデックスに対する1回のアクセスのみでよく、実行効率を高めることができる。
但し、実体化を行うとデータの変更に伴うインデックスメンテナンスコストが著しく増大する上に、実体化したインデックスを格納するディスクスペースも必要となるという問題がある。そこで、本発明では、図5に示すように仮想連結インデックスの部分的な実体化を可能とする。図5の仮想連結インデックスIdc2_fc1(501)では、全体のうち横線の付加された左側半分が実体化されていることを示しており、実体化された範囲のインデックスへのアクセスでは1回のアクセスでファクト表のレコードをポイントすることができる。仮想連結インデックスの実体化の定義例を図4の401に示す。401では、仮想連結インデックスIfc2_fc1のうち、DT1.c12>2を満たす部分のみを実体化する。
ここで上記の仮想連結インデックスの実体化の定義例に沿って、実体化の具体的手順を述べる。上記定義例では実体化の限定範囲がディメンジョン表DT1のカラムc12が2より大の範囲なので、カラムc12のインデックス301を参照して限定範囲内の全てのカラム値(図3の例ではカラム値3と4)についてインデックス301を順次引く。これによりそれぞれ特定されたレコードから結合カラムc11のカラム値1と2を得る。これら結合カラムのカラム値をそれぞれ用いて仮想連結インデックスで定義する結合されるべきインデックス302を引き、ファクト表のレコードをそれぞれ特定し、これらレコードからファクト表のレコードIDであるftidの値を読出す。読み出したftid の値を、先の範囲限定されたディメンジョン表のカラム値のそれぞれに対応づけたファクト表のレコードIDリストの形で記憶する。図3の例では、ディメンジョン表のカラムc12のカラム値3に対応してftid=1とftid=2が、またカラム値4に対応してftid=3が記憶される。
このように仮想連結インデックスを予め部分的に実体化した構成を採用した場合は、仮想連結インデックスを利用可能な問合せの処理の際に、その問合せが指定するカラム値が実体化定義の限定範囲内か否かを判定する。限定範囲内なら仮想連結インデックスが指定する個々のインデックスの順次アクセスに替え、実体化した連結インデックスの一回のアクセスで、つまり記憶したファクト表のレコードIDリストの読み出しでレコードのポイントが可能となる。
次に、本発明による仮想連結インデックスを用いたジョイン処理方式を図8のフローチャートを用いて説明する。本フローチャートで示した処理は、DBMS内の問合せ処理部1103内の問合せ最適化モジュール1104、および該問合せ処理部内の問合せ実行モジュール1105で行われるのが普通であるが、実装の方式によりこれらとは異なるモジュールで実行しても差し支えない。以下の実施例では、実行の主体を前記問合せ処理部とする。
ジョイン処理の最初のステップでは、前記問合せ処理部が仮想連結インデックスの利用可否をチェックする(802)。仮想連結インデックスの利用が不可と指定されている場合(ステップ802でYesが選択された場合)には、仮想連結インデックスを用いない従来のジョイン処理を実行し(ステップ809)、ジョイン処理を終了する(ステップ810)。利用可能な仮想連結インデックスが存在する場合には、必ず該インデックスの利用を考慮するという場合には、ステップ802は省略することも可能である。
仮想連結インデックスの利用を考慮する場合(ステップ802でNoが選択された場合)、前記問合せ処理部は問合せ処理で利用が可能な仮想連結インデックスの存在の有無をチェックする(ステップ803)。利用可能な仮想連結インデックスが存在しない場合(ステップ803でNoが選択された場合)には、仮想連結インデックスを用いない従来のジョイン処理を実行し(ステップ809)、ジョイン処理を終了する(ステップ810)。
利用可能な仮想連結インデックスが存在する場合(ステップ803でYesが選択された場合)、ファクト表とディメンジョン表の結合カラムが、ディメンジョン表側のキーとなっていることを保証できるか否かをチェックする(ステップ804)。ここで、結合カラムとはジョインされる2つの表で値の突合せが行われるカラムを指す。例えば、図5の問合せ506では、ジョイン条件はDT1.c11=FT.c11であるので、結合カラムはDT1.c11およびFT.c11となる。また、カラムcが表Tのキーとなっているとは、カラムcの値が表T中でユニークであること、すなわち同じカラムcには同じ値が現れないことを表す。例えば、図5のディメンジョン表DT1ではカラムc11の値はDT1中で全て異なるため、キーとなっているといえる。制約チェック機構を備えるDBMSでは、表Tのカラムcにユニーク制約を付与し、チェック機構を有効とすることで、カラムcがキーとなっていることを保証できる。
ディメンジョン表の結合カラムがキーとなっていることを保証できる場合(ステップ804でYesが選択された場合)には、本ジョイン処理以降の問合せ処理にディメンジョン表の結合カラム以外のカラム値が必要か否かをチェックする(ステップ805)。例えば図5の問合せQ1(506)は、SELECT句にDT1.c12が指定されているため、問合せ処理に結合カラム以外のカラム値が必要な場合である。一方、同図の問合せQ2(507)は、SELECT句にディメンジョン表のカラムは指定されておらず、ジョイン処理以降の問合せ処理でも該カラムを必要としないため、問合せ処理には結合カラムのみがあればよい場合である。ある処理以降にどのカラムが必要となるかのチェック機構は、問合せに現れるカラムをチェックすることで簡単に実現でき、多くの商用DBMSでサポートされている公知技術である。
問合せ処理にディメンジョン表の結合カラムのみが必要な場合(ステップ805でNoが選択された場合)には、仮想連結インデックス利用により、ファクト表レコードIDリストを生成する(ステップ806)。ファクト表レコードIDリストとは の604に示すように、ジョイン条件を満足するファクト表のレコードIDのみを取り出したリストを指す。例えば問合せが図5のQ2(507)の場合には、該ファクト表レコードIDリストには3のみが格納される。
ディメンジョン表の結合カラムがキーであることが保証できない場合(ステップ804でNoが選択された場合)、もしくは問合せ処理にディメンジョン表の結合カラム以外のカラムが必要な場合(ステップ805でYesが選択された場合)には、仮想連結インデックス利用およびディメンジョン表アクセスにより、カラムマッピングテーブルを生成する(ステップ811)。カラムマッピングテーブルとは図7の704に示すように、ジョイン条件を満足するファクト表のレコードID、結合カラム、そして問合せ処理に必要な結合カラム以外のカラムを格納する表である。問合せが図5のQ1(506)である場合には、カラムマッピングテーブルは、ファクト表レコードIDであるftid、結合カラムc11、および問合せ処理で必要となるカラムc12で構成され、格納されるレコードは{ftid,c11,c12}={(3,2,4)}の1レコードとなる。
ジョイン対象の各ディメンジョン表に対して、ファクト表レコードIDリスト、もしくはカラムマッピングテーブルを生成した後、問合せ処理部は、問合せの全ての条件を満足するファクト表レコードID集合を生成する(ステップ807)。本処理ステップを図10に基づいて説明する。
図10に示す環境では、データベースはファクト表FT(1009)と2つのディメンジョン表DT1(1003)およびDT2(1007)の計3つの表で構成されている。該データベースに対して、問合せQ3(1012)が発行されたとすると、該問合せを処理するためには、FT、DT1、およびDT2のジョイン処理が必要となる。FTとDT1、FTとDT2の結合カラムはそれぞれ、c11、c21である。まずDT1とFTのジョインに関しては、問合せQ3でジョイン処理以降にDT1の結合カラム以外のカラムを必要としないため、Q3のWHERE句に指定されているFT1.c12=4の条件で仮想連結インデックスIdc2_fc1(1001)を引き、ファクト表レコードIDリスト1004を生成する。次に、DT2とFTのジョインに関しては、Q3でSELECT句に結合カラム以外のDT2.c23が指定されているため、Q3のWHERE句に指定されているDT2.c23<3の条件で仮想連結インデックスIdc3_fc2(1005)を引き、カラムマッピングテーブル1008を生成する。Q3ではWHERE句に指定された条件はANDで結合されているため、前記ファクト表レコードIDリスト(1004)と、前記カラムマッピングテーブル(1008)から抽出したレコードIDのリストをAND条件で結合し(1010)、問合せの条件を満足するファクト表レコードID集合1011を生成する。図8に戻って、問合せの条件を満足するファクト表レコードID集合が生成された後、処理中の問合せでカラムマッピングテーブルを作成したか否かをチェックする(ステップ808)。カラムマッピングテーブルが存在しない場合(ステップ808でNoが選択された場合)、前記問合せの結果はファクト表のみで生成できるため、ステップ807で生成したファクト表レコードIDリストに対応するファクト表のレコードを取り出して結果を生成し(ステップ814)、ジョイン処理を終了する(813)。
カラムマッピングテーブルが存在する場合(ステップ808でYesが選択された場合)、ステップ807で生成したファクト表レコードIDリストに対応するファクト表のレコードを取り出し、カラムマッピングテーブルとの突合せにより結果を生成する(ステップ812)。例えば図10の例では、問合せの条件を満足するファクト表レコードID集合ftid={3}であるので、該ftidの値でファクト表FTのインデックスIftを引いてftid=3であるレコード(1013)にアクセスし、該レコードからファクト表から問合せQ3のSELECT句に指定されており、問合せ処理に必要となっているカラムFT.fcの値30000を取り出す。同様にして、カラムマッピングテーブル(1008)でftid=3のレコードにアクセスし、Q3のSELECT句に指定されており、問合せ処理に必要となっているカラムDT2.c23の値2を取り出す。該処理ステップにより、問合せQ3の結果として、{FT.fc1,DT2.c23}={(30000,2)}を生成することができる。
本実施例では、ファクト表レコードIDをリストとして保持する方法を示したが、ビットマップとして保持する方法でも差し支えない。また本実施例では、カラムマッピングテーブルを作成するディメンジョン表に関してはファクト表レコードIDリストを作成しない方法を示したが、該ディメンジョン表に対してカラムマッピングテーブルとファクト表レコードIDリストの両方を作成してももちろん差し支えない。さらに、該ファクト表レコードIDリストおよびカラムマッピングテーブルは、メモリ上に一時的に作成しても、データベース(1107)内にテーブル(1108)として作成しても差し支えない。
【0006】
【発明の効果】
本発明を用いることにより、スタースキーマのジョイン処理の効率を高めることができ、さらに加えてデータベースの処理性能とデータベースメンテナンスコストのバランスを適切に制御することが可能となる。
【図面の簡単な説明】
【図1】本発明における仮想連結インデックスを示す図。
【図2】本発明における仮想連結インデックス定義例を示す図。
【図3】本発明における仮想連結インデックス利用時のデータアクセスパスを示す図。
【図4】本発明における仮想連結インデックスの実体化指定例を示す図。
【図5】本発明における仮想連結インデックスの部分的実体化および問合せ例を示す図。
【図6】本発明における仮想連結インデックス利用によるファクト表レコードIDリスト生成例を示す図。
【図7】本発明における仮想連結インデックス利用によるカラムマッピングテーブル生成例を示す図。
【図8】本発明におけるジョイン処理ステップを示すフローチャート。
【図9】スタースキーマ説明のための例を示す図。
【図10】本発明における仮想連結インデックス利用のジョイン処理ステップを示す図。
【図11】本発明のDBMS構成を説明するための図。
【符号の説明】
101、501、601、701、1001、1005…仮想連結インデックス、
102、103、301、302、502、503、602、702、1002、1006…インデックス、
104、303、504、603、703、902、903、904、905、1003、1007…ディメンジョン表、
105、304、505、901、1009…ファクト表、
604、1004…ファクト表レコードIDリスト、
704、1008…カラムマッピングテーブル、
1108、1109…テーブル。
Claims (11)
- 第1の表と、該第1の表の結合対象である第2の表とを含むスタースキーマのデータベースを格納する記憶装置と、該データベースへのクライアントからの問合せを受け付け、該問合せに対する結果を該クライアントに返す管理手段を含むデータ処理システムであって、
前記第1の表の複数カラムのそれぞれ対応して、それぞれカラム値から前記第1の表のレコードを引くための第1のインデックス群を備え、
前記第2の表の複数カラムにそれぞれ対応して、それぞれカラム値から前記第2の表のレコードを引くための第2のインデックス群を備え、
前記第1のインデックス群のうちの一つと、上記第2のインデックス群のうちの一つとを少なくとも含むインデックスの組合せ特定して順次アクセスすべきインンックス群として定義した仮想連結インデックスを備え、
かつ、前記クライアントからの問合せが前記仮想連結インデックスに対応する場合に、前記仮想連結インデックスが示すインデックス群を順次アクセスして前記問合せに合致する前記第1の表のレコードをポイントし、該レコードを読み出す問い合わせ処理部を有することを特徴とするデータ処理システム。 - 前記問合せ処理部は、前記問合せが前記仮想連結インデックスに対応するとき、前記第1の表と前記第2の表との間の結合カラムと、該問合せ処理で必要な前記結合カラム以外の前記第2の表のカラムとを構成要素とするカラムマッピングテーブルを作成する手段を有する請求項1のデータ処理システム。
- 前記問合せ処理部は、前記問合せが前記仮想連結インデックスに対応し、前記第1の表と第2の表との間の結合カラムが前記第2の表でキーとなっていることが保証されており、かつ該問合せの処理に結合カラム以外の前記第2の表のカラムを必要としない場合に、前記第2の表で前記結合カラムをアクセスして前記第1の表のレコードIDリストを作成することを特徴とする請求項1のデータ処理システム。
- 第1の表と、該第1の表の結合対象である第2の表とを含むスタースキーマのデータベースを格納する記憶装置と、該データベースへのクライアントからの問合せを受け付け、該問合せに対する結果を該クライアントに返す管理手段を含むデータ処理システムであって、
前記第1の表の複数カラムのそれぞれ対応して、それぞれカラム値から前記第1の表のレコードを引くための第1のインデックス群を備え、
前記第2の表の複数カラムにそれぞれ対応して、それぞれカラム値から前記第2の表のレコードを引くための第2のインデックス群を備え、
前記第1のインデックス群のうちの一つと、上記第2のインデックス群のうちの一つとを少なくとも含むインデックスの組合せを特定して順次アクセスすべきインデックス群として定義した仮想連結インデックスと、
予め限定された範囲内のカラム値のそれぞれに対応して、前記仮想連結インデックスの示すインデックス群を順次アクセスして生成した第1の表のレコードIDのリストである実体化した仮想連結インデックスとを備え、
かつ、前記クライアントからの問合せが前記仮想連結インデックスに対応する場合に、前記前記仮想連結インデックスが示すインデックス群を順次アクセスして前記問合せに合致する第1の表のレコードをポイントし、さらに、前記クライアントからの問合せの指定条件であるカラム値が前記指定された範囲内である場合に、前記実体化した仮想連結インデックスを優先して使用して第1の表のレコードをポイントし、ポイントされたレコードを読み出す問合せ処理部を有することを特徴とするデータ処理システム。 - 第1の表に前記問合せ処理に使用可能な仮想連結インデックスが存在する場合に、
第1の表および該第1の表の前記仮想連結インデックスをアクセスし、
第2の表のレコードIDと、第1の表と第2の表の結合対象のカラムである結合カラムと、該問合せ処理で必要な第1の表の結合カラム以外のカラムを構成要素とする、カラムマッピングテーブルを作成する手段を有する、
請求項4記載のデータ処理システム。 - 複数カラムのそれぞれに対応して、それぞれカラム値からレコードを引くための第1のインデックス群を備えるる第1の表と、
前記第1の表に対する結合対象であり、複数カラムのそれぞれに対応して、それぞれカラム値からレコードを引くための第2のインデックス群を備える第2の表とを含むスタースキーマのデータベースを対象とするジョイン処理方法であって、
前記第1のインデックス群うちの一つと、前記第2のインデックス群うちの一つとを少なくとも含むインデックスの組合せを仮想連結インデックスとして定義して記憶する仮想連結インデックス形成ステップと、
前記データベースへの問合せを受けたとき、前記仮想連結インデックスの利用が可能か否かを判定し、利用可能な場合に、前記仮想連結インデックスの指定する組合せのインデックスを順次アクセスすることにより特定される前記第1の表のレコードをポイントし、ポイントされたレコードを読み出す問合せ処理ステップとを有することを特徴とするデータベースのジョイン処理方法。 - 請求項6記載のジョイン処理方法において、予め限定された範囲のカラム値のそれぞれを順次指定して前記記憶された仮想連結インデックスが示すインデックス群を順次アクセスし、これにより特定される前記第1の表のレコードIDのリストを前記カラム値のそれぞれに対応して記憶することにより前記仮想連結インデックスの一部を実体化するステップを、前記問合せ処理ステップに先立つステップとして更に有することを特徴とするデータベースのジョイン処理方法。
- 受けた問合せが指定するカラム値が前記限定された範囲内にあるとき、前記仮想連結インデックスが指定する組合せのインデックスの順次アクセスに替えて前記実体化された前記仮想連結インデックスのアクセスを行うことを特徴とする請求項7記載のデータベースのジョイン処理方法。
- 前記問合せ処理ステップは、前記第1の表と前記第2の表との間の結合カラム、前記問合せの処理に必要な前記結合カラム以外の前記第2の表のカラムとを構成要素とするカラムマッピングテーブルを作成するステップを有する請求項6記載のデータベースのジョイン処理方法。
- 前記カラムマッピングテーブル中から第2の表のレコードIDを取り出して、該レコードIDを用いて第2の表のレコード中の前記問合せの結果生成に必要なカラムの値を取り出し、
該カラムマッピングテーブルから、同じく該問合せの結果生成に必要なカラムの値を取り出し、
これらのカラムの値を連結して該問合せ処理結果とすることを特徴とする請求項9記載のデータベースのジョイン処理方法。 - 第1の表と、該表とジョインされる少なくとも2つ以上のジョイン対象表とのジョイン処理方法において、
第1の表のレコードIDと、第1の表と前記ジョイン対象表の結合対象のカラムである結合カラムが、該ジョイン対象表でキーとなっていることが保証されており、かつ前記問合せ処理で結合カラム以外の該ジョイン対象表のカラムを必要としない場合に、第1の表のレコードIDリストを作成するステップと、
それ以外の場合には、第1の表のレコードIDと、第1の表と前記ジョイン対象表の結合対象のカラムである結合カラムと、該問合せ処理で必要な該ジョイン対象表の結合カラム以外のカラムを構成要素とする、カラムマッピングテーブルを作成するステップと、
該ジョイン対象表に関する前記カラムマッピングテーブルが存在する場合には、該マッピングテーブル中のレコードIDを取り出してレコードIDのリストを作成するステップと、
該レコードIDのリストと、該ジョイン対象表に関する前記レコードIDリストが存在する場合には、該レコードIDリストとに前記問合せの条件を適用して結果となるレコードIDリストを作成するステップと、
該IDを用いて第1の表のレコード中の前記問合せの結果生成に必要なカラムの値を取り出すステップと、
前記カラムマッピングテーブルが存在する場合には、該カラムマッピングテーブルから、同じく該問合せの結果生成に必要なカラムの値を取り出すステップと、これらのカラムの値を連結して該問合せ処理結果を生成するステップと、
を有することを特徴とするジョイン処理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002269373A JP2004110219A (ja) | 2002-09-17 | 2002-09-17 | データ処理システム及びジョイン処理方法 |
US10/370,504 US20040054683A1 (en) | 2002-09-17 | 2003-02-24 | System and method for join operations of a star schema database |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002269373A JP2004110219A (ja) | 2002-09-17 | 2002-09-17 | データ処理システム及びジョイン処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004110219A true JP2004110219A (ja) | 2004-04-08 |
Family
ID=31986819
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002269373A Pending JP2004110219A (ja) | 2002-09-17 | 2002-09-17 | データ処理システム及びジョイン処理方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20040054683A1 (ja) |
JP (1) | JP2004110219A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100778328B1 (ko) | 2007-01-19 | 2007-11-21 | 주식회사 퓨전소프트 | 가상칼럼을 이용한 데이터베이스에서의 질의 최적화 방법 |
JP2008015810A (ja) * | 2006-07-06 | 2008-01-24 | Hitachi Software Eng Co Ltd | 複数列の表データにおけるインデクス分割管理方法 |
JP2009193153A (ja) * | 2008-02-12 | 2009-08-27 | Nec Corp | 管理システム、履歴情報の保存方法、及び履歴情報データベースのデータ構造 |
JP2011524587A (ja) * | 2008-06-17 | 2011-09-01 | アティヴィオ,インコーポレイテッド | サーチエンジンインデックス内の結合データに対するクエリ |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7805411B2 (en) * | 2003-09-06 | 2010-09-28 | Oracle International Corporation | Auto-tuning SQL statements |
US7580922B2 (en) * | 2005-01-04 | 2009-08-25 | International Business Machines Corporation | Methods for relating data in healthcare databases |
US8527502B2 (en) * | 2006-09-08 | 2013-09-03 | Blade Makai Doyle | Method, system and computer-readable media for software object relationship traversal for object-relational query binding |
US8321429B2 (en) * | 2006-12-28 | 2012-11-27 | Sybase, Inc. | Accelerating queries using secondary semantic column enumeration |
US9692856B2 (en) * | 2008-07-25 | 2017-06-27 | Ca, Inc. | System and method for filtering and alteration of digital data packets |
US8972463B2 (en) * | 2008-07-25 | 2015-03-03 | International Business Machines Corporation | Method and apparatus for functional integration of metadata |
US8401990B2 (en) * | 2008-07-25 | 2013-03-19 | Ca, Inc. | System and method for aggregating raw data into a star schema |
US9110970B2 (en) * | 2008-07-25 | 2015-08-18 | International Business Machines Corporation | Destructuring and restructuring relational data |
US8943087B2 (en) * | 2008-07-25 | 2015-01-27 | International Business Machines Corporation | Processing data from diverse databases |
US9177019B2 (en) * | 2009-05-19 | 2015-11-03 | Sap Se | Computer system for optimizing the processing of a query |
US8898145B2 (en) * | 2011-06-15 | 2014-11-25 | Microsoft Corporation | Query optimization techniques for business intelligence systems |
US9390162B2 (en) | 2013-04-25 | 2016-07-12 | International Business Machines Corporation | Management of a database system |
US10467228B2 (en) | 2015-08-11 | 2019-11-05 | Sybase, Inc. | Accelerating database queries using equivalence union enumeration |
US10642833B2 (en) | 2015-08-11 | 2020-05-05 | Sybase, Inc. | Accelerating database queries using composite union enumeration |
US10599678B2 (en) * | 2015-10-23 | 2020-03-24 | Numerify, Inc. | Input gathering system and method for defining, refining or validating star schema for a source database |
US10977251B1 (en) * | 2015-12-30 | 2021-04-13 | Teradata Us, Inc. | Join index bitmap for non-equality query conditions |
US10108667B2 (en) | 2016-03-07 | 2018-10-23 | International Business Machines Corporation | Query plan optimization for large payload columns |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5864842A (en) * | 1995-10-23 | 1999-01-26 | Ncr Corporation | Optimization of SQL queries using hash star join operations |
US5848408A (en) * | 1997-02-28 | 1998-12-08 | Oracle Corporation | Method for executing star queries |
US5960428A (en) * | 1997-08-28 | 1999-09-28 | International Business Machines Corporation | Star/join query optimization |
US5991754A (en) * | 1998-12-28 | 1999-11-23 | Oracle Corporation | Rewriting a query in terms of a summary based on aggregate computability and canonical format, and when a dimension table is on the child side of an outer join |
US6484159B1 (en) * | 1999-05-20 | 2002-11-19 | At&T Corp. | Method and system for incremental database maintenance |
US6763352B2 (en) * | 1999-05-21 | 2004-07-13 | International Business Machines Corporation | Incremental maintenance of summary tables with complex grouping expressions |
US6374235B1 (en) * | 1999-06-25 | 2002-04-16 | International Business Machines Corporation | Method, system, and program for a join operation on a multi-column table and satellite tables including duplicate values |
US6356891B1 (en) * | 2000-04-20 | 2002-03-12 | Microsoft Corporation | Identifying indexes on materialized views for database workload |
US6882993B1 (en) * | 2002-01-28 | 2005-04-19 | Oracle International Corporation | Incremental refresh of materialized views with joins and aggregates after arbitrary DML operations to multiple tables |
-
2002
- 2002-09-17 JP JP2002269373A patent/JP2004110219A/ja active Pending
-
2003
- 2003-02-24 US US10/370,504 patent/US20040054683A1/en not_active Abandoned
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008015810A (ja) * | 2006-07-06 | 2008-01-24 | Hitachi Software Eng Co Ltd | 複数列の表データにおけるインデクス分割管理方法 |
KR100778328B1 (ko) | 2007-01-19 | 2007-11-21 | 주식회사 퓨전소프트 | 가상칼럼을 이용한 데이터베이스에서의 질의 최적화 방법 |
JP2009193153A (ja) * | 2008-02-12 | 2009-08-27 | Nec Corp | 管理システム、履歴情報の保存方法、及び履歴情報データベースのデータ構造 |
JP2011524587A (ja) * | 2008-06-17 | 2011-09-01 | アティヴィオ,インコーポレイテッド | サーチエンジンインデックス内の結合データに対するクエリ |
Also Published As
Publication number | Publication date |
---|---|
US20040054683A1 (en) | 2004-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10521427B2 (en) | Managing data queries | |
US20220035815A1 (en) | Processing database queries using format conversion | |
JP2004110219A (ja) | データ処理システム及びジョイン処理方法 | |
US11593369B2 (en) | Managing data queries | |
Bugiotti et al. | Invisible glue: scalable self-tuning multi-stores | |
US7577637B2 (en) | Communication optimization for parallel execution of user-defined table functions | |
US8122008B2 (en) | Joining tables in multiple heterogeneous distributed databases | |
US7756889B2 (en) | Partitioning of nested tables | |
US8160999B2 (en) | Method and apparatus for using set based structured query language (SQL) to implement extract, transform, and load (ETL) splitter operation | |
US20040128276A1 (en) | System and method for accessing data in disparate information sources | |
US20050289167A1 (en) | Impact analysis in an object model | |
JP4483034B2 (ja) | 異種データソース統合アクセス方法 | |
US5742809A (en) | Database generic composite structure processing system | |
US7136861B1 (en) | Method and system for multiple function database indexing | |
US20140067853A1 (en) | Data search method, information system, and recording medium storing data search program | |
US20080082516A1 (en) | System for and method of searching distributed data base, and information management device | |
US8005844B2 (en) | On-line organization of data sets | |
Arnold et al. | HRDBMS: Combining the best of modern and traditional relational databases | |
US7433882B2 (en) | Data management system and computer program | |
AU2017202899B2 (en) | Managing data queries | |
US7177856B1 (en) | Method for correlating data from external databases | |
US8301657B1 (en) | Set-level database access for performing row-sequential operations | |
JP2004259066A (ja) | データソース統合プログラム及びシステム並びに方法 |