データベースSQL文の最適化

データベースSQL文の最適化

最適化する理由:

実際のプロジェクトが開始され、データベースが一定期間稼働した後、初期のデータベース設定は実際のデータベースのパフォーマンスと若干異なることがあります。この時点で、最適化の調整を行う必要があります。

データベースの最適化のトピックは比較的広範囲にわたり、次の 4 つのカテゴリに分類できます。

  • 》ホストパフォーマンス
  • 》メモリ使用量パフォーマンス
  • 》ネットワーク伝送性能
  • 》SQL文実行パフォーマンス [ソフトウェアエンジニア]

次に、データベース SQL 最適化ソリューションをいくつか示します。

(01)最も効率的なテーブル名の順序を選択する(筆記試験でよく聞かれる)

データベース パーサーは、FROM 句のテーブル名を右から左に処理します。FROM 句の最後のテーブルが最初に処理されます。FROM 句に複数のテーブルが含まれている場合は、レコード数が最も少ないテーブルを選択して最後に配置する必要があります。クエリに 3 つ以上のテーブルがある場合は、他のテーブルによって参照されるテーブルを選択して最後に配置する必要があります。

例: 従業員番号、名前、給与、給与等級、部署名を照会する

emp.empno、emp.ename、emp.sal、salgrade.grade、dept.dname を選択
salgrade、dept、emp から
ここで、(emp.deptno = dept.deptno) かつ (emp.sal は salgrade.losal と salgrade.hisal の間)

1) 3 つのテーブルがまったく関連していない場合は、レコード数と列名が最も少ないテーブルを最後に記述します。

2) 3 つの表が関連している場合は、参照が最も多い表を最後に配置します。

(02) WHERE句の結合順序(筆記試験でよく出題される)

データベースは、WHERE 句を右から左に解析します。この原則に従って、テーブル間の接続は他の WHERE 条件の左側に記述する必要があり、最大数のレコードをフィルターできる条件は WHERE 句の右側に記述する必要があります。

例: 従業員番号、名前、給与、部署名を照会する

emp.empno、emp.ename、emp.sal、dept.dname を選択
emp、deptから
ここで (emp.deptno = dept.deptno) かつ (emp.sal > 1500)

(03) SELECT句でアスタリスク(*)を使用しない

解析プロセス中に、データベースは * をすべての列名に順番に変換します。この作業はデータ ディクショナリをクエリすることによって行われるため、時間がかかります。

emp から empno、ename を選択します。

(04) DELETEの代わりにTRUNCATEを使用する

(05)できるだけCOMMITを使う

COMMITはロールバックポイントを解放するため

(06)HAVING句をWHERE句に置き換える

WHEREが最初に実行され、HAVINGが後で実行されます

(07)SQLの効率を上げるために内部関数をより頻繁に使用する

(08) テーブルエイリアスの使用

salgrade s

(09) 列エイリアスの使用

ename e

つまり、データベースの最適化は1日で終わるものではなく、長期にわたる実践の中で繰り返しテストとまとめを行う必要があります。学生の皆さんには、今後、それをしっかりと理解してもらいたいと思います。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • mysql+mycat、負荷分散、マスタースレーブレプリケーション、読み取り/書き込み分離操作に基づく安定した高可用性クラスタを構築します。
  • Windows環境でのmycatのインストールと起動
  • mycat を使用して MySQL データベースの読み取りと書き込みの分離を実装する例
  • MyBatisはMyCatを使用してマルチテナントを実現します
  • mysql mycat ミドルウェアのインストールと使用
  • データベースクエリの最適化: サブクエリの最適化
  • データベースの4つの分離レベル
  • MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介
  • Mysqlデータベースの文字化けに対処する方法
  • データベースミドルウェアMyCatの紹介

<<:  Vueはカスタム命令を使用してページの下部に透かしを追加します

>>:  VSCode+CMake+Clang+GCC 環境構築チュートリアル (Win10 の場合)

推薦する

VMware15 の Deepin インストール詳細チュートリアル (画像とテキスト)

序文Deepin のユーザー インターフェイスは、使用時に非常に見栄えがします。インターフェイス効果...

Vueエンジニアがカプセル化しなければならない埋め込み命令の知識のまとめ

目次序文指導の基本フック機能フック関数のパラメータ文章使い方とアイデア成し遂げる汎用性を高める要約す...

Dockerを使用してphabricatorをインストールする方法

ここでは Ubuntu 16.04 システムを使用しています。 dockerを使用したインストールh...

Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明

目次Vue3 カプセル化メッセージプロンプトインスタンス関数スタイルレイアウトカプセル化メッセージ....

TypeScript で時間を費やした場所の概要

TS で時間を過ごした場所をいくつか記録します。 (まず、文句を言わせてください。stackover...

Mysql WorkBench のインストールと設定のグラフィックチュートリアル

この記事では、Mysql WorkBenchのインストールと設定のグラフィックチュートリアルを参考ま...

MySQL 5.7 でブロックポジショニング DDL の問題を解決する

前回の記事「MySQL テーブル構造の変更、メタデータ ロックを知っておく必要があります」では、MD...

HTML ページに画像を挿入し、マップ インデックスを追加する方法の例

1. WEBでサポートされている画像形式: GIF: 256色を保存でき、透明色をサポートし、アニメ...

概要ページでのフロートとクリアフロート

1. フロート: 主な目的は、テキストを画像の周囲に折り返す効果を実現することです。また、複数列レイ...

Vueデータ双方向バインディング実装方法

目次1. はじめに2. コードの実装2.1 目的分析2.2 実装プロセス2.2.1 エントリーコード...

React ページ ターナーの実装 (フロント エンドとバックエンドを含む)

目次フロントエンド上記のアイデアに従って、ページめくり機能を設計して記述します。バックエンド(Jav...

MySQLのデッドロックとログに関する詳細な説明

最近、MySQL オンラインでいくつかのデータ異常が発生しましたが、すべて早朝に発生しました。ビジネ...

MySql8.0 のトランザクション分離レベルエラーの問題を解決する

目次MySql8.0 トランザクション分離レベルエラーの表示質問コマンドは次のように変更されますMy...

Vueリクエストインターセプターの設定方法の詳しい説明

以下の手順に従ってください1. request.jsコンテンツ: http リクエスト インターセプ...

CSS3+ベジェ曲線でスケーラブルな入力検索ボックス効果を実現

では、早速レンダリングを見てみましょう。 コア コードはtransition: cubic-bezi...