データベース システムは、管理情報システムの中核であり、データベース ベースのオンライン トランザクション処理 (OLTP) とオンライン分析処理 (OLAP) は、銀行、企業、政府、その他の部門で最も重要なコンピューター アプリケーションの 1 つです。
ほとんどのシステムの適用例から、さまざまなデータベース操作のうちクエリ操作が最も大きな割合を占めており、クエリ操作の基礎となる SELECT ステートメントは SQL ステートメントの中で最もコストがかかるステートメントです。たとえば、銀行の口座データベースのテーブル情報が数百万、さらには数千万のレコードに蓄積されるなど、データ量が一定のレベルに蓄積される場合、テーブル全体のスキャンには数十分、場合によっては数時間かかることがよくあります。フルテーブルスキャンよりも優れたクエリ戦略を採用すると、多くの場合、クエリ時間を数分に短縮できます。これは、クエリ最適化テクノロジの重要性を示しています。
著者は、アプリケーション プロジェクトの実装中に、一部のフロントエンド データベース開発ツール (PowerBuilder など) を使用してデータベース アプリケーションを開発するときに、多くのプログラマがユーザー インターフェイスの豪華さだけに注目し、クエリ ステートメントの効率に注意を払っていないことに気づきました。 、Delphi など)その結果、開発されたアプリケーション システムは非効率になり、リソースが大幅に浪費されます。したがって、効率的かつ合理的なクエリ ステートメントをどのように設計するかが非常に重要です。この記事では、アプリケーション例に基づいて、データベース理論と組み合わせて、実際のシステムにおけるクエリ最適化テクノロジのアプリケーションを紹介します。
問題の分析
多くのプログラマは、クエリの最適化は DBMS (データベース管理システム) のタスクであり、プログラマが作成した SQL ステートメントとはほとんど関係がないと考えていますが、これは間違いです。適切なクエリ プランを使用すると、プログラムのパフォーマンスが何十倍も向上することがよくあります。クエリ プランはユーザーによって送信された SQL ステートメントのコレクションであり、クエリ プランは最適化後に生成されたステートメントのコレクションです。 DBMS 処理クエリ プランのプロセスは次のとおりです。クエリ ステートメントの字句チェックと構文チェックが完了した後、ステートメントは DBMS クエリ オプティマイザに送信され、オプティマイザが代数最適化とアクセス パスの最適化を完了すると、プリコンパイルされたモジュールがクエリ プランを処理します。ステートメントを作成してクエリ プランを生成し、それをシステムに送信して適切なタイミングで処理および実行し、最後に実行結果をユーザーに返します。実際のデータベース製品 (Oracle、Sybase など) の上位バージョンでは、コストベースの最適化手法が使用され、システム ディクショナリ テーブルから取得した情報に基づいてさまざまなクエリ プランのコストを見積もり、選択することができます。より良い計画を立てる。現在のデータベース製品はクエリの最適化においてますます優れていますが、ユーザーが送信した SQL ステートメントはシステム最適化の基礎となるため、元々貧弱なクエリ プランがシステム最適化後に効率的になるとは考えにくいです。ユーザーが書くことは非常に重要です。ここでは、システムによって実行されるクエリの最適化については説明しません。以下では、ユーザーのクエリ プランを改善するソリューションに焦点を当てます。
問題を解決する
以下では、リレーショナル データベース システム Informix を例として、ユーザーのクエリ プランを改善する方法を紹介します。