1

私の質問は T-SQL、SQL Server 環境に根ざしていますが、その範囲はこのテクノロジに限定されません。私は、既存のビュー、ストアド プロシージャ、および新しいビューを設計する、非常に複雑なビジネス ロジックを持つデータベースに取り組んでいます。異なるクエリまたはそれらの一部を比較することによって、同じ仕事を異なる配置で実行しているセクションがあることを強く感じますが、もちろん混乱全体をリファクタリングするには、感覚以上の何かが必要です。そのため、2 つのステートメントが同等であることを示す方法を決定しようとしています。

A と B の 2 つのクエリが同じレコードセットを生成することを確認することは、明らかですが弱い応答です。A が B のサブセットであり、B が A のサブセットである場合、それらは同じレコードセットです。もちろん、レコードセットはクエリではないため、結果はデー​​タと特定のパラメーター値に依存する可能性があるためです。私の質問は: 2 つの異なるクエリの同等性を証明する方法はありますか? データベースによって実行される最適化はこれで機能するはずなので、そうです。誰かがこれを掘り下げているドキュメントや本へのポインタを私に提供できますか? 同等性を証明する一般的な方法がない場合、仕事をする効果的なヒューリスティックに従って実行される回帰テストに基づくスマートなアプローチがありますか?

後で編集: 場合によっては、リレーショナル代数を使用してクエリを (手作業で) リバース エンジニアリングすることは、他のクエリやコンピューターを使用する代わりに、クエリの等価性を評価する優れた方法でしょうか? 場合によっては、この「リバース エンジニアリング」を実行するのに役立つ自動化ツールがありますか?

助けてくれてどうもありがとう

4

5 に答える 5

1

問題は NP 完全であるように見えるため、おそらく証明できません。クエリの同等性に関するこのSOの質問を確認してください(その1つはOracleに関するものですが、関連する回答/リンクがいくつかあります)。

于 2012-04-27T10:04:47.270 に答える
0

実行計画によってのみ確認できます。それを除けば、このことを証明する方法はないと思います。

于 2012-04-27T10:09:01.467 に答える
0

2 つのクエリの実行プランを確認できます。それらが同じであれば、あなたはあなたの答えを持っています!

于 2012-04-27T10:03:21.237 に答える
0

あなたがこれを正式に証明または反証できるとは思えませんが、これに対する私の見解は次のとおりです。

  • すべてのユースケースを特定する
  • すべての境界値を特定する
  • すべてのパラメータを識別

そこからテスト計画を導き出します。それはあなたがする必要があります

  • ケースごとにテストデータを作成する
  • そのデータに対して両方のクエリを実行します
  • 結果を比較する

テスト後に違いが見つからない場合は、両方のステートメントが同等であると合理的に確信できます。

于 2012-04-27T10:17:08.890 に答える
0

これには、「正規のクエリ プラン」ジェネレーターを実装する必要があります (DBMS によって生成される「最適なクエリ プラン」は非決定的である可能性があります)。ほとんどの場合、用語と表のアルファベット順をタイブレーカーとして使用すると、そこにたどり着きます。

于 2012-04-27T10:13:54.673 に答える