データベース理論とシステムにおいて、単調なクエリとは、データベースに新しいタプルを追加しても、以前に出力したタプルが失われないクエリです。正式には、スキーマR上のクエリqが単調であるのは、 Rのすべての 2 つのインスタンスI、Jに対して、q が単調である場合のみです( q は単調関数である必要があります)。 [1]
単調クエリの例としては、等価条件のみを含む選択-プロジェクト-結合クエリ (結合クエリとも呼ばれます) があります。非単調クエリの例としては、集計クエリや、差集合を含むクエリがあります。
クエリが単調であるかどうかを識別することは、特にビューのメンテナンスとデータ ストリームの管理において、クエリの最適化にとって重要です。単調なクエリの回答セットは、データベースにタプルが追加されるにつれて大きくなるだけなので、データベースの新しい部分のみを実行し、新しい結果を既存の回答セットに追加することで、クエリ処理を最適化できます。
アプリケーション
クエリのネスト解除
単調なクエリは、SQL クエリのネスト解除というトピックにおいて重要です。クエリが単調である場合、ネストされたクエリを実際にネスト解除できることを意味します。
データストリーム
データ ストリームは、リアルタイムで連続した、順序付けられた (到着時刻によって暗黙的に、またはタイムスタンプによって明示的に) アイテムのシーケンスです。アイテムの数は無限であると見なされるため、アイテム全体を保存することは現実的ではありません。データ ストリームに対するクエリは、連続クエリまたは長時間実行クエリと呼ばれることが多く、ほとんどの場合、ストリーム内のタプルの限られたウィンドウに対して実行されます。連続クエリを評価するには、新しく到着したタプルに対してクエリを再評価し、新しいタプルを既存の結果セットに追加します。より正式には、A(Q, t)を、時刻 t における連続クエリQの回答セット、τ を現在の時刻、0 を開始時刻とします。Q が単調である場合、時刻 τ における結果セットは次のようになります。
対照的に、非単調クエリの回答セマンティクスは次のようになります。
[2]
参考文献
