JP2002163289A - 関数に基づく比較を有するクエリのためのインデックスの使用 - Google Patents

関数に基づく比較を有するクエリのためのインデックスの使用

Info

Publication number
JP2002163289A
JP2002163289A JP2001296546A JP2001296546A JP2002163289A JP 2002163289 A JP2002163289 A JP 2002163289A JP 2001296546 A JP2001296546 A JP 2001296546A JP 2001296546 A JP2001296546 A JP 2001296546A JP 2002163289 A JP2002163289 A JP 2002163289A
Authority
JP
Japan
Prior art keywords
index
query
condition
rows
function
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.)
Granted
Application number
JP2001296546A
Other languages
English (en)
Other versions
JP4879425B2 (ja
JP2002163289A5 (ja
Inventor
Cesar A Galindo-Legaria
シーザー・エイ・ガリンド−レガリア
Rahul Kapoor
ラフル・カプーア
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2002163289A publication Critical patent/JP2002163289A/ja
Publication of JP2002163289A5 publication Critical patent/JP2002163289A5/ja
Application granted granted Critical
Publication of JP4879425B2 publication Critical patent/JP4879425B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24537Query rewriting; Transformation of operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • Y10S707/99935Query augmenting and refining, e.g. inexact access

Abstract

(57)【要約】 【課題】 関数に基づく比較を有するクエリのためにイ
ンデックスを使用する方法およびシステムを提供する。 【解決手段】 関数に基づく比較を有する元の条件(5
10)を含むクエリのために、インデックスを用いる。
最初に黙示条件を識別し、多数の行を有する列内の値に
適用する。インデックスを用いて、黙示条件を満たす値
を有する行を識別する。最後に、元の条件を用いて、イ
ンデックスに対しクエリを実行する。実行中の例外をど
のように処理するかを識別するために、フラグ(54
0,550)を用いることも可能である。多数の異なる
関数に対する境界を設けるために、テーブルを用いるこ
とも可能である。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、一般的に、コンピ
ュータの分野に関し、特に関数に基づく比較を有するク
エリのためのインデックスの使用に関する。
【0002】
【従来の技術】この特許文書の開示内容の一部は、著作
権の保護対象となる題材を含む。著作権者は、本特許文
書または特許開示内容の、特許商標庁における特許ファ
イルまたは記録に現れる通りのファクシミリ再生につい
ては、いずれの者による場合であっても異議を唱えない
が、それ以外についてはあらゆる著作権を保存すること
とする。以下の通知は、以下および図面に記載するソフ
トウエアおよびデータに適用されるものとする。著作権
c2000年Microsoft Corporation、版権所有。
【0003】リレーショナル・データベースは、データ
の行即ちタプル(tuple)の集合である。各行は、番
号、名称、アドレス等のような情報を収容する1つ以上
の列を有することができる。例えば、列は、税金を支払
う人の名前を、住所、社会保証番号、およびその他の列
に収容されている他の情報と共に収容する場合もある。
行内の情報は全て同じ人に関係がある。クエリを書くこ
とによって、データベースから情報を要求することがで
きる。このようなクエリの1つは、年齢に関係付けるこ
ともできる。クエリは、ある年の人全ての平均収入を求
めることと関係付けることも可能である。
【0004】インデックスは、所与の条件を満たす行を
見つけるために一般的に用いられている。前述の例で
は、インデックスは年齢に基づくことができる。このよ
うなインデックスは、年齢の昇順で行のリストをソート
することができる。インデックスがあれば、データベー
スは、年齢がある年齢よりも大きい行のグループだけを
見ることによって、クエリの実行を高速化することがで
きる。また、年齢基準を満たさない行をデータベースが
飛ばすことも可能にする。
【0005】インデックスの使用は、非常に強力なクエ
リ実行技法であり、実行時間および手間を劇的に改善す
ることができる。インデックスは、ある参照構造を与
え、所与のテーブルのあらゆる行を検査しなければなら
ない代わりに、具体的な列の値が与えられれば、1つの
行に直接アクセスすることを可能にする。前者をテーブ
ル全体のスキャンと呼んでいる。列<col>上のイン
デックスを用いて、形態<col><cmp><exp
r>の条件を満たす行を見つけることができる。例え
ば、列T.a上のインデックスを用いて、T.a=5ま
たはT.a>10という条件を満たす行を検索すること
ができる。
【0006】条件が形態T.a=R.bであるときに、
同じインデックスを用いてテーブルの結合を実行するこ
とができる。この場合、Rの各行について、T.bに具
体的な値を決定し、このような値を有するTの行全て
を、インデックスを通じて見つけ出す。
【0007】
【発明が解決しようとする課題】列上で直接比較を行な
わないが、ある計算上で行なう場合、列上のインデック
スは通常適用できず、インデックスによって実行を高速
化することは、市販の製品では多くの場合不可能であ
る。例えば、列T.aのインデックスは、大抵の場合、
条件T.a*T.a>25を満たす行を突き止めるため
に利用できない。尚、5.0よりも大きい値および−
5.0よりも小さい値はこの条件を満たすことを注記し
ておく。通常、形態f(<col>)<com><ex
pr>の比較のために(列の値を用いる関数であり、結
果を別の式と比較する)、<col>上のインデックス
を用いて、認定した行を突き止めることはできない。
【0008】タイプ変換は、インデックスが通常用いら
れない関数の共通な例の1つである。浮動小数点から整
数への変換は、タイプ変換の一例である。この文書では
以降、‘CONVERT(column,type)’
を用いてタイプ変換を示すことにする。CONVERT
(<col>)<com><expr>を含むクエリに
至るには、異なる複数の方法がある。ユーザは、条件を
このような形態で直接書くことができ、あるいはシステ
ムによって、整数や浮動小数点のような比較可能なタイ
プに対して動作するときに、暗示的な変換を導入するこ
ともできる。この種の比較を導入する別の方法は、他の
条件からの推論によるものである。
【0009】
【課題を解決するための手段】列に対して関数に基づく
比較を有する元の条件を含むクエリに、インデックスを
用いる。列に対して黙示条件(implied condition)を
最初に特定し、列を制限するために適用し、インデック
スからフェッチする。最後に、元の条件を用いて、制限
した行の集合に対してクエリを実行する。
【0010】黙示条件は、少なくとも1つの不等号の境
界、不等号の上側境界および下側境界、および非線形関
数を特定する。境界または複数の境界は、元の条件を満
たす潜在的な可能性がある全ての行を含むように、そし
てできるだけ元の条件を満たさない行を含まないように
計算する。
【0011】黙示条件は、一旦パラメータ値がわかれ
ば、実行時に完全に決定される。動的な間隔が、どの境
界を適用すべきかを示すフラグを与え、上側境界、下側
境界、または全行認定(all-rows-qualify)、認定行無
し(no-rows-qualify)、または非ヌル認定(non-nulls
-qualify)のような特殊な間隔を示す。黙示境界条件の
計算中に例外に遭遇した場合、動的間隔全行認定を用い
れば、全ての行を考慮するので、常に安全である。
【0012】本発明の更に別の態様では、多数の関数に
対して黙示条件を識別する。境界は、黙示条件に基づい
て計算され、クエリ内に含まれるパラメータに基づく。
【0013】
【発明の実施の形態】以下の本発明の実施形態の一例の
詳細な説明では、その一部をなす添付図面を参照する。
図面では、本発明を実施可能な具体的な実施形態の例
を、例示として示す。これらの実施形態は、当業者が本
発明を実施することができるように十分詳細に説明して
あり、更に、他の実施形態も利用可能であり、論理的、
数学的、電気的およびその他の変更も、本発明の精神ま
たは範囲から逸脱することなく行なえることは理解され
よう。したがって、以下の詳細な説明は、限定的な意味
で捕らえてはならず、本発明の範囲は添付した特許請求
の範囲によってのみ定義されることとする。
【0014】詳細な説明は多数の章に分かれている。第
1章は、本発明を実現するコンピュータ・システムの動
作について説明する。続いて、条件に基づく比較を有す
るクエリのためにどのようにしてインデックスを生成す
るかについての高度な説明に移る。次に、インデックス
に対する境界をどのように構築するか、および実行時の
例外を処理するためにフラグをどのように用いるかに関
して更なる詳細を提示する。これに続いて、いくつかの
潜在的な利点を説明し、更に別の代替実施形態を説明す
る結論に至る。ハードウエアおよび動作環境 本発明を実現するシステム例は、図1における計算デバ
イス100のような計算デバイスを含む。その最も基本
的な構成では、計算デバイス100は、典型的に、少な
くとも1つの演算装置102およびメモリ104を含
む。計算機の正確なコンフィギュレーションおよび形式
に応じて、メモリ104は、揮発性(RAMのよう
な)、不揮発性(ROM、フラッシュ・メモリ等のよう
な)、またはこれら2つの何らかの組み合わせとなる場
合もある。この最も基本的なコンフィギュレーション
を、図1における破線106で示す。
【0015】デバイス100は、追加の機構/機能性を
含むこともできる。例えば、デバイス100は、磁気ま
たは光ディスクまたはテープを含むがこれらには限定さ
れない、追加のストレージ(リムーバブルおよび/また
は非リムーバブル)を含むことができる。このような追
加のストレージは、図1では、リムーバブル・ストレー
ジ108および非リムーバブル・ストレージ110によ
って例示されている。コンピュータ記憶媒体は、揮発性
および不揮発性、リムーバブルおよび非リムーバブル媒
体を含み、コンピュータ読み取り可能命令、データ構
造、プログラム・モジュールまたはその他のデータのよ
うに、情報格納技術のあらゆる方法で実現されている。
メモリ104、リムーバブル・ストレージ108および
非リムーバブル・ストレージ110は、全てコンピュー
タ記憶媒体の例である。コンピュータ記憶媒体は、RA
M、ROM、EEPROM、フラッシュ・メモリ、また
はその他のメモリ技術、CD−ROM、ディジタル・バ
ーサタイル・ディスク(DVD)またはその他の光スト
レージ、磁気を用いたストレージ、あるいは所望の情報
を格納するために使用可能であり、デバイス100がア
クセス可能なその他のあらゆる媒体を含むが、これらに
限定される訳ではない。このようなコンピュータ記憶媒
体はいずれも、デバイス100の一部となり得る。
【0016】また、デバイス100は通信接続部112
も内蔵し、当該デバイスは他のデバイスと通信すること
ができる。通信媒体は、典型的に、読み取り可能命令、
データ構造、プログラム・モジュール、あるいは搬送波
またはその他の輸送機構のような変調データ信号におけ
るその他のデータを具体化し、あらゆる情報配信媒体を
含む。「変調データ信号」という用語は、信号内に情報
をエンコードするように変更された、1つ以上のその特
性集合を有する信号を意味する。限定ではなく一例とし
て、通信媒体は、有線ネットワークまたは直接配線接続
のような有線媒体や、音響、RF、赤外線およびその他
のワイヤレス媒体のようなワイヤレス媒体を含む。ここ
で用いる場合、コンピュータ読み取り可能媒体とは、記
憶媒体および通信媒体双方を含むこととする。
【0017】また、デバイス100は、キーボード、マ
ウス、ペン、音声入力デバイス、接触入力デバイス等の
ような入力デバイス114を有することもできる。ディ
スプレイ、スピーカ、プリンタ等のような出力デバイス
116も含ませることができる。これらのデバイスは、
当技術では周知である。
【0018】本発明は、1つ以上のコンピュータまたは
デバイス110のようなその他のデバイスによって実行
する、プログラム・モジュールのようなコンピュータ実
行可能命令のコンテクストにおいて説明するとよい。通
常、プログラム・モジュールは、ルーチン、プログラ
ム、オブジェクト、コンポーネント、データ構造等を含
み、特定のタスクを実行するか、または特定の抽象的デ
ータ・タイプを実装する。典型的に、プログラム・モジ
ュールの機能性は、種々の実施形態に、必要に応じて組
み合わせたりあるいは分散することができる。
【0019】オブジェクト指向プログラミング言語を含
む多くの異なる方法を用いて、ソフトウエアを設計する
ことができる。C++およびJava(登録商標)は、
オブジェクト指向プログラミングに関連する機能性を与
える、共通のオブジェクト指向コンピュータ・プログラ
ミング言語の2つの例である。オブジェクト指向プログ
ラミング方法は、データ・メンバ(変数)、および当該
データ上で動作し、クラスと呼ばれる単一のエンティテ
ィを形成するメンバ関数(メソッド)をカプセル化する
手段を与える。また、オブジェクト指向プログラミング
方法は、既存のクラスに基づいて新たなクラスを作成す
る手段も与える。
【0020】オブジェクトとは、クラスのインスタンス
である。オブジェクトのデータ・メンバは、コンピュー
タ・メモリ内部に格納されている属性であり、メソッド
は、このデータ上で、潜在的に与えることができる他の
サービスと共に作用する、実行可能なコンピュータ・コ
ードである。本発明では、発明の態様を一実施形態にお
いてオブジェクトとして実現するというオブジェクトの
観念を利用する。
【0021】インターフェースとは、名前のあるユニッ
トに編成された、関連する関数のグループである。各イ
ンターフェースは、ある識別子によって一意に識別する
ことができる。インターフェースはインスタンス化(in
stantiation)を有さない。即ち、インターフェースは
定義のみであり、当該インターフェースが指定するメソ
ッドを実装するため実行可能コードを必要としない。オ
ブジェクトは、インターフェースが指定するメソッドに
実行可能コードを与えることによって、インターフェー
スを支援することができる。オブジェクトが供給する実
行可能コードは、インターフェースが指定する定義を満
たさなければならない。オブジェクトは追加のメソッド
を与えることもできる。インターフェースは、オブジェ
クト指向プログラミング環境における、またはオブジェ
クト指向プログラミング環境による使用に限定される訳
ではないことを、当業者は認めよう。
【0022】本発明は、機能ブロックを含むフローチャ
ートを用いて説明する。ブロックは、必要に応じて、1
つ以上のソフトウエアまたはハードウエア・モジュール
で実現することができ、データベース・システムのコン
テクストにおいて、計算デバイス100上で実行する。インデックスの使用 場合によっては、クエリは、列を異なるタイプの式と比
較するので、比較の前にタイプ変換を行なう必要があ
る。式は、非線形関数である場合もあり、クエリに答え
るためにインデックスを用いることは難しい。何故な
ら、条件は、列上ではなく、列の関数上で述べられてい
るので、条件を満たすインデックスにおいて、特定の行
をどのようにして突き止めるかわからないからである。
【0023】タイプ変換の一例では、float(T.
a)>=2.1である。比較値は、定数、クエリ・パラ
メータ、別のテーブルからの列、または、総計のような
ある計算の結果、またはサブクエリ(subquery)とする
ことができる。結局、列を異なるタイプの値と比較する
ことになり、適正な比較には、列上でのタイプ変換が必
要となる。この問題を解決するために、実際の認定範囲
よりは多少広い有効範囲(covering range)を生成し、
このような行を直接得るために、インデックスを用い
る。
【0024】プロセス全体を図2Aおよび図2Bに示
す。元の条件を210において受け取る。形態は、変換
(列)<比較><式>とすることができる。例えば、列
A上にインデックスがあるとする。220において、元
の条件において用いた列上にインデックスがあるか否か
確認するためにチェックを行なう。例えば、列A上にイ
ンデックスがある。次に、230において、特定のイン
デックス化した列に関連する黙示条件を識別する。その
形態は、変換(列)<比較><式>とすることができ
る。黙示条件を用いて、値の範囲を識別する境界を決定
する。これは、値の列における実際の認定範囲よりも多
少広くして、認定行を識別するようにする。実行中、黙
示条件を評価して境界を生成し、列上のインデックスを
用いて、認定行集合を突き止める。240において、実
行計画を設定し、コンパイル時に、特定のインデックス
上に、黙示条件に対して動的間隔を構築する。
【0025】250において開始する実行時では、実際
のパラメータ値に基づいて、動的間隔を計算する。用い
る具体的な動的間隔を決定する間に、例外が発生する。
例外処理は、動的間隔決定の「内部」であり、必要であ
れば(例えば、例外があった場合)、全行認定を示す。
動的間隔は、「A>10およびA<20となる全てのA
を得る」と言うことができ、あるいは「全行認定」と言
うことができ、あるいは「認定行なし」と言うことがで
きる。動的間隔を決定するロジックは、実際のパラメー
タ値に基づき、クエリ計画(query plan)に含まれる。
次に、インデックス・スキャン/参照コード260に動
的間隔を渡し、実際の行を検索する。インデックスを用
い、動的間隔結果に基づいて、行を突き止める。次に、
270において元の条件を、検索した行に適用する(黙
示条件が元の条件と同等でない場合)。
【0026】減少した行集合、即ち、構築した範囲は次
のようになるはずである。 i)全ての認定行が含まれることを意味するセーフ、お
よび ii)あるとしても、少数の冗長行が含まれることを意
味するタイト。
【0027】これは、セーフおよびタイト範囲の導出例
である。 元の条件:CONVERT(Aint,float)>2.5 黙示条件:Aint>2 元の条件はクエリの一部とすることができ、図3のフロ
ーチャートにおける310で受け取られる。図3は、コ
ンパイル時および実行時双方におけるコンポーネントを
含む。実行時よりもコンパイル時にできるだけ多くの分
析を行なう方が有利である。何故なら、1回のコンパイ
ルに対する実行が多い可能性が高いからである。一実施
形態では、ブロック310および320は、コンパイル
時に行われ、330,340,350は実行時に行われ
る。これは、逆関数を調べた結果が実行時に受け渡さ
れ、実行計画を通じて行われることを暗示する。
【0028】320において、逆関数のテーブルから調
べることができる元の関数の逆を用いて、黙示条件を計
算する式を構築する。Aint上のインデックスは、元
の条件を満たす行を直接発見するために用いることはで
きないが、黙示条件Aint>2はインデックス参照の
ために用いることができる。比較のための値は定数であ
る必要はないので、構築した式から実行時に正確な境界
を決定し、330に示すようにコンパイル時にこれらを
計算する必要がある。言い換えると、先に示した値
「2.5」は、実際には「z」のようなパラメータとす
ることもでき、コンパイルしたクエリを実行するときに
実際の値が与えられるだけである。
【0029】以下のクエリを一例として用いる。
【0030】
【数1】 Select * from T where convert (A, float) > @f ここで、@fは、浮動小数点パラメータとして定義する。
Tは、整数である少なくとも1つの列A、および多数の
行を有するテーブルである。逆関数または境界を{A>
変換(@f,int)−1}として識別する。また、こ
れをシーク述語(seek predicate)とも呼ぶ。「−1」
を加算して、認定した行全てが範囲内にあること、即
ち、範囲がセーフであることを確実にする。これは、本
質的に、タイプまたは他の関数のドメインにおける次に
小さい数値である。これは、逆関数の実行中に浮動小数
点値が切り捨てられるときに、このような比較に何が発
生するか注視することによって得られる。
【0031】黙示条件の計算における例外を処理し、ユ
ーザには渡さないようにする必要がある。何故なら、黙
示条件は元のクエリの一部ではなかったからである。次
に、340において例外を識別する。例外が発生する可
能性があるのは、識別した値の範囲からは、もはや所望
のタイプではない値が生ずる場合があるからである。こ
れを、タイプのドメインの外側にあると言う。範囲が前
述のセーフであったことを確保することによって、「−
1」を減算する。これによって、タイプ整数ドメインの
外側にある数値に至る可能性がある(0から250、ま
たは−36500から+36500のように、タイプの
ドメインに関して制限がある可能性があり、範囲の外側
に該当する場合、セーフではない)。他の例外も起こる
可能性があり、動的範囲との関連において以下で更に詳
しく説明する。一旦例外を識別したなら、350におい
てフラグをセットし、例外のタイプに応じて所望の方法
でクエリの実行中に例外を処理する。
【0032】先のクエリを変更して等式を含ませる場
合、
【0033】
【数2】 Select * from T where convert (A, float) = @f 上側の境界も生成しなければならない。この場合、上側
の境界を{A<convert(@f,int)+1}
として識別する。「+1」を加算して、上側の境界を広
げ、範囲をセーフにする。これは、本質的に、タイプま
たは他の関数のドメインにおける次に大きな数値であ
る。これは、下側の境界に対する「−1」の加算と同様
である。これは、元の条件に含まれる変換関数に応じて
変化する。これは、他の定数、または実行時に評価され
る実際の関数とすることもできる。上側の境界は、前述
の不等式では必要ではなかった。また、下側の境界が必
要でない場合もあることがわかる。
【0034】通常、前述のように、等式には2つの黙示
条件が発生する。各下側および各上側の境界毎に黙示条
件が発生する。元の比較が、例えば、下側の境界のみで
ある場合、黙示の上側境界はなく、これは発生しない。
変換比較が等式である場合、双方の境界が生ずる。例え
ば、 元の条件:CONVERT (Aint, float) = 2.5 黙示下側境界:Aint > TRUNCATE(2.5) - 1.0 = 1 黙示上側境界:Aint>TRUNCATE(2.5) + 1.0 = 3 図4は、パラメータ化した元の条件に対する境界の導出
を示す。410において、元の条件を、タイプT1の列
「colT1」として記述する。これは、タイプT2に
変換され、次いでタイプT2のある「valueT2」
と比較される。元の比較から開始して、黙示比較CLo
werおよびCUpperを、それぞれ、420および
430において定義する。
【0035】ここで、新たに得られた比較は直接列上に
あり、既存のインデックスを直ちに適用することができ
る。黙示条件が元の条件と同等であるという保証はない
ので、インデックスから検索した全ての行に、元の条件
をなおも適用する。しかしながら、この時点において、
考慮すべき行数は、黙示比較によって減少している。 動的間隔 前述の黙示境界が十分ではない可能性があるという状況
もあり得る。境界式は、オーバーフローまたはアンダー
フローの問題を招く場合がある。したがって、単に比較
を加算すると、無効な実行エラーが生ずる虞れがある。
この問題に取り組み、更に生成した計画を最適化するた
めに、クエリ実行時に動的間隔を生成する。SQLにお
いて直接タイプ入力するもののような、正規の比較とは
異なり、実行時比較フラグを生成する。このような比較
フラグは、標準的な比較演算子、および3つのそれ以外
の選択肢(alternative)がある。
【0036】・未満(LT)、以下(LTE)、超過
(GT)、以上(GTE)等。 ・全行認定(CMPALL) ・非ヌル行全認定(CMPNOTNULL) ・認定行無し(CMPFALSE) 比較は、実行時に作成され、これらの中からどれを使用
するか決定する。特定の列に対する各参照範囲は、境界
値、および比較フラグによって構成され、各々実行時に
動的に計算される。図5は、黙示境界の図を更に詳細化
したものである。元の条件は、510において、タイプ
T1の列colT1として記述されており、これをタイ
プT2に変換し、次いである値T2と比較する。元の比
較から開始し、黙示比較CLowerおよびCUppe
rを、それぞれ、520および530において定義す
る。下側および上側境界に対して、それぞれ、540お
よび550においてフラグを定義する。
【0037】1対の境界およびフラグをインデックス参
照コードにおいて用い、指定した行を検索する。例え
ば、等式の場合は更に以下のように詳細化する。 元の条件:CONVERT(Aint, float) = 2.5 下側境界:TRUNCATE(2.5) = 2 下側境界フラグ:IF CONVERT(TRUNCATE(2.5), float) =
2.5 THEN GTEELSE FALSE 上側境界:TRUNCATE(2.5) = 2 下側境界フラグ:IF CONVERT(TRUNCATE(2.5), float) =
2.5 THEN LTEELSE FALSE 基本的に、比較すべき浮動小数点数(float)が「整数
と整合した」場合、対象の特定値を調べる。それ以外の
場合、変換の後一致する整数はないので、いずれの行も
検索しない。最初の場合、得られる間隔は次のようにな
る。
【0038】
【数3】 TRUNCATE(value) <= column <= TRUNCATE(value) 二番目の場合、変換が一致せず、次の境界が得られ、こ
れは空である。
【0039】
【数4】TRUNCATE(value)CMPFALSE column コンパイル時に式がわかっている場合、これらを実行
し、特定の間隔に減少させることができる。しかし、通
常、全てのパラメータ値がわかっている場合、これらは
クエリ実行時に解き、評価しなければならない。間隔は
実行時に動的に解明されるので、異なる値のパラメータ
によって、適正なインデックスの参照が行われる。
【0040】前述のプロセスを実行するようにクエリ・
プロセッサを変更する。以下に示すのは、前述の方法を
実行するコードにおける変更の概要である。 i)インデックス処理コードは自動的に前述の形態の述
語をシーク可能として識別する。
【0041】ii)比較およびそれに伴うタイプに応じ
て、境界を構築する。例えば、convet(colu
mn)=<expr>は、形態column>lowe
rboundおよびcolumn<upperboun
dのシーク述語に変換する。
【0042】lowerboundは、実行時に評価さ
れる式によって設定され、<expr>を列のタイプに
変換し、次いでタイプのドメインにおいて境界がセーフ
であることを保証する次に小さい値に到達する。したが
って、整数列を浮動小数点式と比較するために、浮動小
数点式を整数に切り捨て、「1」を減算する。uppe
rboundは、同様に、exprを列のタイプに変換
し、次いでタイプのドメインにおいて境界がセーフであ
ることを保証する、次に大きい値に到達することによっ
て構築する。
【0043】iii)境界の評価中にオーバーフローお
よびアンダーフローのような実行時例外を捕らえるため
の機構を設け、この場合、比較フラグをCMPALLに
セットする。これは、関与するタイプに対するドメイン
境界が交差するという稀な場合において、一定の意味を
保証する。
【0044】iv)前述のような整数から浮動小数点数
への変換の等式のような、一層精巧な関数を用いて公開
およびフラグを計算することによって、対象となる特殊
事例に対応する。
【0045】v)元の述語を常に残余述語として結び付
け、シークを満たし得る異質の行を全て排除する。何故
なら、境界は不正確であり、境界の構築中に例外があ
り、シークはスキャンに変換されたからである。残余述
語を適用することによるオーバーヘッドは、インデック
スを使用可能とすることによって動的に減少した、適切
な行をフェッチする際の実際のコストと比較すれば、無
視し得る程度である。 結論 本願は、本発明のあらゆる改作および変形をも包含する
ことを意図している。本発明は、特許請求の範囲および
その均等物によってのみ限定されることを、明白に意図
している。関数に基づく比較を有する元の条件を含むク
エリに、インデックスを用いる。インデックスは、作成
してもよく、または所望の列に対する既存のインデック
スを使用してもよい。最初に黙示条件を識別し、元の条
件も満たす全ての行を認定するが、インデックス参照に
用いることができる形態とする。黙示条件を満たす値を
有する行を認定するために、インデックスを用いる。最
後に、元の条件を用いて、識別した行に対しクエリを実
行する。
【0046】尚、フラグを用いて例外を処理したが、ク
エリ実行計画における例外処理コードの使用を含む、他
の構成も使用可能である。整数および浮動小数点のタイ
プ変換の例を用いたが、本発明は、時間や、異なる精度
の数値のような他のタイプ変換や、ストリングの比較に
も適用できることは理解されよう。
【図面の簡単な説明】
【図1】本発明を実現するコンピュータ・システムのブ
ロック図である。
【図2】図2Aは、本発明にしたがって、コンパイル時
にクエリに対してインデックスを用いる動作全体を示す
フローチャートである。図2Bは、本発明にしたがって
実行時にクエリに対してインデックスを用いる動作全体
を示すフローチャートである。
【図3】コンパイルおよび実行時における範囲の計算を
示すフローチャートである。
【図4】元の条件および黙示条件の間の関係を示すブロ
ック図である。
【図5】元の条件および黙示条件の間の関係、およびフ
ラグの使用を示すブロック図である。
【符号の説明】
100 計算デバイス 102 演算装置 104 メモリ 106 基本的コンフィギュレーション 108 リムーバブル・ストレージ 110 非リムーバブル・ストレージ 112 通信接続部 114 入力デバイス 116 出力デバイス
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ラフル・カプーア アメリカ合衆国ワシントン州98008,ベル ビュー,ノースイースト・トゥエンティセ ヴンス・ストリート 16238 Fターム(参考) 5B075 QR00 QS20 QT06 5B082 GA08

Claims (34)

    【特許請求の範囲】
  1. 【請求項1】 関数に基づく比較を含むクエリのために
    インデックスを用いる方法であって、 比較する列に対して値の範囲を決定するステップであっ
    て、前記範囲が少なくとも全ての所望の行を含む、ステ
    ップと、 前記比較する列に対してインデックスを得るステップ
    と、 前記インデックスを用いて前記クエリを実行するステッ
    プと、から成る方法。
  2. 【請求項2】 請求項1記載の方法において、前記範囲
    は、上側境界および下側境界から成る、方法。
  3. 【請求項3】 請求項1記載の方法において、前記範囲
    は、最小数の冗長行を含む、方法。
  4. 【請求項4】 関数に基づく比較を含むクエリのために
    インデックスを用いる方法を機械に実行させる命令を有
    する機械読み取り可能媒体であって、前記方法が、 比較する列に対して値の範囲を決定するステップであっ
    て、前記範囲が少なくとも全ての所望の行を含む、ステ
    ップと、 前記比較する列に対してインデックスを得るステップ
    と、 前記インデックスを用いて前記クエリを実行するステッ
    プと、から成る、機械読み取り可能媒体。
  5. 【請求項5】 請求項4記載の機械読み取り可能媒体に
    おいて、前記範囲は、上側境界および下側境界から成
    る、機械読み取り可能媒体。
  6. 【請求項6】 請求項5記載の機械読み取り可能媒体に
    おいて、前記範囲は、セーフおよびタイトである、機械
    読み取り可能媒体。
  7. 【請求項7】 関数に基づく比較を含むクエリのために
    インデックスを用いるシステムであって、 比較する列に対して値の範囲を決定するモジュールであ
    って、前記範囲が少なくとも全ての所望の行を含む、モ
    ジュールと、 前記比較する列に対してインデックスを得るモジュール
    と、 前記インデックスを用いて前記クエリを実行するモジュ
    ールと、から成るシステム。
  8. 【請求項8】 関数に基づく比較を有する元の条件を含
    むクエリのためにインデックスを用いる方法であって、 黙示条件を識別するステップと、 多数の行を有する列における値に、前記黙示条件を適用
    するステップと、 前記黙示条件を満たす値を有する全ての行に対するイン
    デックスを得るステップと、 前記元の条件を用いて、前記インデックスに対し前記ク
    エリを実行するステップと、から成る方法。
  9. 【請求項9】 請求項8記載の方法において、前記範囲
    は、上側境界および下側境界から成る、方法。
  10. 【請求項10】 請求項9記載の方法において、前記境
    界は逆関数を含む、方法。
  11. 【請求項11】 請求項9記載の方法において、前記境
    界をパラメータ化し、実行時において値の置換を可能と
    する、方法。
  12. 【請求項12】 請求項8記載の方法において、前記イ
    ンデックスは最小数の冗長行を含む、方法。
  13. 【請求項13】 請求項8記載の方法において、前記関
    数は、タイプ変換および非線形関すから成るグループか
    ら選択した関数から成る、方法。
  14. 【請求項14】 請求項8記載の方法であって、更に、
    動的間隔を設ける、方法。
  15. 【請求項15】 請求項14記載の方法において、前記
    動的間隔は、境界式から成る、方法。
  16. 【請求項16】 請求項14記載の方法において、前記
    境界式は、演算子、全行認定、全非ヌル行認定、および
    全行認定せずの内少なくとも1つを含む、方法。
  17. 【請求項17】 請求項8記載の方法において、例外が
    発生した場合、前記列全体に対して前記クエリを実行す
    る、方法。
  18. 【請求項18】 関数に基づく比較を有する元の条件を
    含むクエリのためにインデックスを用いる方法を機械に
    実行させる命令を有する機械読み取り可能媒体であっ
    て、前記方法が、 黙示条件を識別するステップと、 多数の行を有する列における値に、前記黙示条件を適用
    するステップと、 前記黙示条件を満たす値を有する全ての行に対するイン
    デックスを得るステップと、 前記元の条件を用いて、前記インデックスに対し前記ク
    エリを実行するステップと、から成る機械読み取り可能
    媒体。
  19. 【請求項19】 関数に基づく比較を有する元の条件を
    含むクエリのためにインデックスを用いるシステムであ
    って、 黙示条件を識別する手段と、 多数の行を有する列における値に、前記黙示条件を適用
    する手段と、 前記黙示条件を満たす値を有する全ての行に対するイン
    デックスを得る手段と、 前記元の条件を用いて、前記インデックスに対し前記ク
    エリを実行する手段と、から成るシステム。
  20. 【請求項20】 関数に基づく比較を有する元の条件を
    含むクエリのためにインデックスを用いる方法であっ
    て、 黙示条件を識別するステップと、 所望の列に対してインデックスを選択するステップと、 前記インデックスにおける値に前記黙示条件を適用し、
    前記黙示条件を満たす行の範囲を得るステップと、 から成る方法。
  21. 【請求項21】 請求項20記載の方法において、前記
    範囲は、上側境界および下側境界から成る、方法。
  22. 【請求項22】 請求項20記載の方法において、前記
    関数は、タイプ変換および非線形関すから成るグループ
    から選択した関数から成る、方法。
  23. 【請求項23】 請求項20記載の方法であって、更
    に、境界式を用いるステップを含む、方法。
  24. 【請求項24】 請求項23記載の方法において、前記
    境界式は、全ての行を認定するか、全ての非ヌル行を認
    定するか、およびいずれの行も認定しないかの内少なく
    とも1つを特定する、方法。
  25. 【請求項25】 請求項20記載の方法であって、更
    に、テーブルを用いて、関数に基づく各比較毎に、前記
    境界をどのように決定するか特定するステップを含む、
    方法。
  26. 【請求項26】 請求項20記載の方法において、前記
    クエリは、前記黙示条件に影響を及ぼす少なくとも1つ
    のパラメータを含む、方法。
  27. 【請求項27】 関数に基づく比較を有する元の条件を
    含むクエリのためにインデックスを用いる方法を機械に
    実行させる命令を有する機械読み取り可能媒体であっ
    て、前記方法が、 黙示条件を識別するステップと、 所望の列に対してインデックスを選択するステップと、 前記インデックスにおける値に前記黙示条件を適用し、
    前記黙示条件を満たす行の範囲を得るステップと、から
    成る機械読み取り可能媒体。
  28. 【請求項28】 関数に基づく比較を有する元の条件を
    含むクエリを実行する方法であって、 クエリ実行計画を得るステップと、 インデックス内においてセーフ範囲を識別するステップ
    と、 前記インデックスによって識別した行に、前記元の条件
    を適用するステップと、 から成る方法。
  29. 【請求項29】 関数に基づく比較を有する元の条件を
    含むクエリを実行する方法であって、 クエリ実行計画を得るステップと、 インデックス内においてセーフ範囲およびタイト範囲を
    識別するステップと、 前記インデックスによって識別した行に、前記元の条件
    を適用することによって前記クエリを実行するステップ
    と、 前記クエリの実行中に発生した例外を処理するステップ
    と、 から成る方法。
  30. 【請求項30】 請求項29記載の方法において、例外
    の場合、前記インデックスを使用せずに、クエリを実行
    する、方法。
  31. 【請求項31】 請求項29記載の方法であって、更
    に、どのように例外を処理するかを特定するフラグをセ
    ットするステップを含む、方法。
  32. 【請求項32】 請求項31記載の方法において、前記
    フラグが、未満、以下、以上、等しい、全行認定、全非
    ヌル行認定、および全行認定せずから成るグループから
    選択した演算を表わす、方法。
  33. 【請求項33】 請求項29記載の方法において、セー
    フ範囲およびタイト範囲を識別するステップは、前記実
    行計画において識別したパラメータを、前記クエリから
    の値と置換するステップを含む、方法。
  34. 【請求項34】 関数に基づく比較を有する元の条件を
    含むクエリを実行する方法を機械に実行させる命令を有
    する機械読み取り可能媒体であって、前記方法が、 クエリ実行計画を得るステップと、 インデックス内においてセーフおよびタイト範囲を識別
    するステップと、 前記インデックスによって識別した行に、前記元の条件
    を適用することによって前記クエリを実行するステップ
    と、 前記クエリの実行中に発生した例外を処理するステップ
    と、から成る機械読み取り可能媒体。
JP2001296546A 2000-09-27 2001-09-27 関数に基づく比較を有するクエリのためのインデックスの使用 Expired - Lifetime JP4879425B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/671,224 US6757671B1 (en) 2000-09-27 2000-09-27 Use of indices for queries with comparisons on a function
US09/671224 2000-09-27

Publications (3)

Publication Number Publication Date
JP2002163289A true JP2002163289A (ja) 2002-06-07
JP2002163289A5 JP2002163289A5 (ja) 2008-11-06
JP4879425B2 JP4879425B2 (ja) 2012-02-22

Family

ID=24693623

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001296546A Expired - Lifetime JP4879425B2 (ja) 2000-09-27 2001-09-27 関数に基づく比較を有するクエリのためのインデックスの使用

Country Status (4)

Country Link
US (1) US6757671B1 (ja)
EP (1) EP1193619B1 (ja)
JP (1) JP4879425B2 (ja)
AT (1) ATE522871T1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005267612A (ja) * 2004-03-18 2005-09-29 Microsoft Corp 暗黙の述部を使用する改良されたクエリ・オプティマイザ

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7188334B1 (en) * 2001-11-20 2007-03-06 Ncr Corp. Value-ordered primary index and row hash match scan
US7213011B1 (en) * 2002-04-08 2007-05-01 Oracle International Corporation Efficient processing of multi-column and function-based in-list predicates
US7685104B2 (en) * 2004-01-08 2010-03-23 International Business Machines Corporation Dynamic bitmap processing, identification and reusability
US20060064650A1 (en) * 2004-09-20 2006-03-23 International Business Machines Corporation Method, system, and computer program product for type-based table navigation
US10664474B1 (en) 2013-03-15 2020-05-26 Progress Software Corporation Query system
US10262033B2 (en) * 2016-03-18 2019-04-16 International Business Machines Corporation Method for query execution planning

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4774657A (en) * 1986-06-06 1988-09-27 International Business Machines Corporation Index key range estimator
JPH01219927A (ja) * 1988-02-29 1989-09-01 Hitachi Ltd データベースの情報検索方式
JPH02236778A (ja) * 1989-03-10 1990-09-19 Fujitsu Ltd 問い合わせ最適化処理方法
JPH04199275A (ja) * 1990-11-26 1992-07-20 Oki Electric Ind Co Ltd データベース検索装置
US5664172A (en) * 1994-07-19 1997-09-02 Oracle Corporation Range-based query optimizer
US5727197A (en) * 1995-11-01 1998-03-10 Filetek, Inc. Method and apparatus for segmenting a database
US6081799A (en) * 1999-05-05 2000-06-27 International Business Machines Corporation Executing complex SQL queries using index screening for conjunct or disjunct index operations

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5918225A (en) * 1993-04-16 1999-06-29 Sybase, Inc. SQL-based database system with improved indexing methodology
US5548754A (en) * 1995-02-07 1996-08-20 International Business Machines Corporation Optimization of SQL queries using early-out join transformations
US5548755A (en) * 1995-02-17 1996-08-20 International Business Machines Corporation System for optimizing correlated SQL queries in a relational database using magic decorrelation
US6006219A (en) * 1997-11-03 1999-12-21 Newframe Corporation Ltd. Method of and special purpose computer for utilizing an index of a relational data base table

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4774657A (en) * 1986-06-06 1988-09-27 International Business Machines Corporation Index key range estimator
JPH01219927A (ja) * 1988-02-29 1989-09-01 Hitachi Ltd データベースの情報検索方式
JPH02236778A (ja) * 1989-03-10 1990-09-19 Fujitsu Ltd 問い合わせ最適化処理方法
JPH04199275A (ja) * 1990-11-26 1992-07-20 Oki Electric Ind Co Ltd データベース検索装置
US5664172A (en) * 1994-07-19 1997-09-02 Oracle Corporation Range-based query optimizer
US5727197A (en) * 1995-11-01 1998-03-10 Filetek, Inc. Method and apparatus for segmenting a database
US6081799A (en) * 1999-05-05 2000-06-27 International Business Machines Corporation Executing complex SQL queries using index screening for conjunct or disjunct index operations

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005267612A (ja) * 2004-03-18 2005-09-29 Microsoft Corp 暗黙の述部を使用する改良されたクエリ・オプティマイザ

Also Published As

Publication number Publication date
JP4879425B2 (ja) 2012-02-22
EP1193619B1 (en) 2011-08-31
ATE522871T1 (de) 2011-09-15
US6757671B1 (en) 2004-06-29
EP1193619A2 (en) 2002-04-03
EP1193619A3 (en) 2006-03-15

Similar Documents

Publication Publication Date Title
US7873666B2 (en) Methods and computer systems for data conversion
US7136873B2 (en) Dynamic filtering in a database system
US7010542B2 (en) Result set formatting and processing
US7096216B2 (en) Performing operations on a set of objects in a database system
US7412436B2 (en) System and interface for manipulating a database
US7162469B2 (en) Querying an object for properties
US7149733B2 (en) Translation of object queries involving inheritence
US7082433B2 (en) Translation of object queries involving inheritence
JP4955876B2 (ja) クエリ最適化のためのコストに基づく具体化ビューの選択
US7480661B2 (en) Query services for database system
US7254808B2 (en) Method for specifying and parsing expressions
US9892143B2 (en) Association index linking child and parent tables
US8667010B2 (en) Database table partitioning allowing overlaps used in full text query
US7426521B2 (en) Property and object validation in a database system
US20040015474A1 (en) Database simulation of data types
US7130856B2 (en) Map and data location provider
JP2002163289A (ja) 関数に基づく比較を有するクエリのためのインデックスの使用
US20230153455A1 (en) Query-based database redaction
US11847121B2 (en) Compound predicate query statement transformation

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080924

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080924

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110415

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110705

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111101

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111130

R150 Certificate of patent or registration of utility model

Ref document number: 4879425

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141209

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250