2

「最適化されたクエリジェネレーター」を作りたいとしましょう。基本的に、時間/スペースの制限に基づいて SQL サーバーに配置できるものよりもはるかに優れた SQL クエリ オプティマイザーです。クエリと DB 統計を入力として取り、ターゲット システムに合わせて調整された SQL クエリを生成し、ほぼ理想的な計画にすばやく最適化します。

どの程度の SQL をサポートする必要がありますか? ほとんどの有用なクエリを簡単に記述できるほど柔軟でありながら、完全な SQL よりも十分に小さく、切り詰める価値のある SQL のサブセットはありますか? また、「マシンの近く」に固執する必要がない場合、クエリを説明するより良い方法はありますか?

既存の SQL を処理するプログラムではなく、新しい SQL を作成するためのツールを考えています。入力言語がクエリの要件を記述できる限り、実際に SQL を入力として受け取る必要はありません。

質問の別の形式は次のようになると思います:パフォーマンスのためだけに存在し、読みやすさ/理解度を向上させることのないSQLの部分はありますか?


誰かが指摘したように、これを行うには「大量の製品固有の知識」が必要であり、それ(たとえば、ネストされたサブクエリと何でも、どの種類のインデックスを使用する必要があるか、そのようなこと) は、まさにツールがカプセル化することを意図したものです。ユーザーがその知識を学ぶ必要がないようにします。


注:実際のクエリ プランの生成には興味がありません。これは DBMS の仕事であり、とにかく SQL からは実行できないからです。特定の DBMS 用に調整する必要のない入力から、その DBMS 用の適切な SQL を作成する作業を自動化できるシステムに興味があります。

4

7 に答える 7

4

あなたが SQL を「マシンに近い」と表現していることに驚きました。SQL 自体は手続き型ではなく宣言型であり、リレーショナル データベースの興味深い側面の 1 つは、SQL 自体がクエリの実行方法についてほとんど指示しないため、実装者が革新しなければならない自由です。

まったくの有用性については、SQL を改善するのは非常に難しいと思います。完璧な言語だとは言いませんが、リレーショナル データベース (および一部の非リレーショナル データベース) の共​​通語です。

于 2009-01-13T01:57:54.280 に答える
2

Bramha、あなたが何を求めているかわかっているかどうかわかりません。SQL の最適化は、クエリ コンポーネントが正しい順序であることを確認するだけの問題ではありません。インデックス、データ ページ レイアウトなどについて十分な知識が必要であることは認識しているようですが、SQL Server クエリへの適切な「フック」を取得しない限り、クエリ句を並べ替えるだけで済みます。プロセッサ。それがMSの機能であるため、基本的にクエリをより深く、より基本的なレベルに「コンパイル」して、データアクセスを最適化します。

于 2009-01-13T01:56:33.533 に答える
1

うーん... (Google で検索するのが面倒すぎると思います) SQL クエリの実行計画を構築するために使用される 9 つの関係演算子 (スキャン、ジャンプ、ハッシュマージなど) があります。演算子の選択は、ターゲット データベース テーブルの使用統計、利用可能なインデックスなどに基づいています。

クエリプランナーがすでに行っていることを再作成しようとしているようですね...?

編集:

  1. ほとんどのクエリには、実行方法にそれほど多くのオプションがあるとは思いません。
  2. より最適なソリューションを実行したとしても、DBエンジンに実行計画を「自分のやり方で」作成させるためにSQLにできることは何もないと思います。
  3. 独自のデータベース エンジンの作成を計画している場合を除きます。

この質問には非常に困惑しています。ホイールを再発明したように見えますが、搭載するワゴンがありません!?

于 2009-01-13T03:02:41.607 に答える
0

単一の特定のデータベース エンジンに対してこれを書くつもりですか? そうでない場合は、かなり苦労することになると思います。データベース クエリの最適化は、エンジンの実装と内部の正確な仕様、テーブル、インデックス、主キーと外部キーの関係、データの型と分布などに大きく依存します。最適化されたクエリを作成する実際のロジックは、異なるデータベース エンジン間での重複はほとんどない可能性があります。(さらに言えば、少なくとも MySQL の場合、テーブル タイプは最適化に大きな違いをもたらします。)サポートされている各 DB エンジンのリリースごとに、特性も大きく異なる場合があります。SQL を生成している場合は、エンジン自体のオプティマイザー/クエリ プランナーが SQL をどのように処理するかを予測できる必要があります。

問題は、クエリの最適化はリレーショナル理論にあまり依存しておらず、DB の機能と保持されているデータに関する詳細な知識に非常に大きく依存しているということです。DB のメタデータを抽出できたとしても、DB 自体よりも優れたクエリ プランを作成するのは難しいのではないかと思います。DB のメタデータを取得できない場合、原因は絶望的です。 .

于 2009-01-13T04:41:37.553 に答える
0

「単なる人間のための SQL クエリ」のパターンは、英語の説明から始まる構造化された正規の形式で機能するため、役立つ場合があります。

ちょっと覗き見したい場合は、オンラインでSafariにアクセスしてください。

于 2009-01-13T01:50:55.993 に答える