2

実際には簡単な質問ですが、私は経験が不足しており、データベース システムの内部最適化についての知識がありません (一般的には T-SQL ですが、私の特定のケースでは T-SQL です)。

整数データ フィールドを持つデータベースがあると仮定します (簡略化のため 1-3):

table Data (D1, D2, D3)

私は一致基準のコレクションを持っています:

D1 > 3       D2 < 100    D3 all
D1 >= 50     D2 all      D3 > 50
and so on...

クエリを実行する単純な方法ANDは、基準のORすべての式とすべての基準式に対してです。しかし、明らかに最適化されたクエリはD1 >= 50 and D2 < 100 and D3 > 50(編集を参照)

質問は次のとおりです。データベース (私の場合は T-SQL) は単純なクエリを最適化できますか?

そうでない場合:誰かが私を正しい方向に向けることができます(その場合には、理解できないアルゴリズムが必要だと確信しています)。

編集:

明らかに最適化の前提が間違っていました:-D

D1 >= 50     D2 < 100    D3 all
D1 >= 50     D2 all      D3 > 50
and so on...


D1 >= 50 and D2 < 100 or D1 >= 50 and D3 > 50
これは からまで最適化できます
D1 >= 50 and (D2 < 100 or D3 = 50)

そして、どういうわけか、データベースはそれほどスマートであるべきだと思います(クエリがどれほど複雑になるかを考えると、これはデータベースの子供の遊びに違いありません)。

問題は次のとおりです。どのくらいの基準を処理できますか (X データ フィールドと Y 基準)。しかし、それは私が理解しなければならないことです。ここで日付を収集したら報告します(しばらく時間がかかる場合があります)。

4

1 に答える 1

0

本当の答えはないので、私は自分の質問に答えて、これに関するフィードバックを提供します。
(誰かがこれに貢献してくれると嬉しいです!)

元の質問は、データとそれに適用される基準のコレクションを含むテーブルを暗示していました。さらなる分析で、このアイデアの背後にある概念全体が非常に複雑であるため、この基準を別のテーブルに保存することに頼ることができないという事実に直面しました (理由: 動的 API と、明確なプログラミング ライブラリなしでそれを処理しようとすると、純粋なカオス) )。

そのため、最終的に動的 SQL になります (結合、ストアド プロシージャなどではなく)。幸いなことに、以前の制限によってクエリ対象のデータを減らすことができます。これにより、基準でクエリする必要のある大量のデータが削減されます。(たとえば) 100 個の基準にそれぞれ 10 個のルールを適用しても問題はありません。データベースが(一般的なワークロードを除いて)短期間にどれだけ多くのクエリを炎上することなく処理できるか、私はまだ心配しています。

それでも、開発者としての私にとって「苦労」するのはかなりきちんとした要件です。また何かあればレポしますね…

于 2013-09-07T00:11:54.963 に答える