ホームページ データベース mysql チュートリアル SQLステートメントを最適化するにはどうすればよいですか?

SQLステートメントを最適化するにはどうすればよいですか?

Apr 08, 2019 am 11:06 AM
sql 最適化

SQL ステートメントの最適化には次のような方法があります: 1. SQL ステートメントの形式を統一する; 2. クエリを最適化し、テーブル全体のスキャンを回避する; 3. SQL ステートメントは簡潔にする必要がある; 4. 中間データを一時的に保存するために「一時テーブル」の使用を検討する結果; 5. 大規模なトランザクション操作を避けるようにしてください; 6. クライアントに大量のデータを返さないようにしてください。以下の記事で詳しく紹介していますので、ご参考になれば幸いです。

SQLステートメントを最適化するにはどうすればよいですか?

開発プロジェクトの初期段階では、ビジネス データの量が比較的少なかったため、一部の SQL の実行効率がプログラムの実行効率に与える影響はそれほど大きくありませんでした。また、SQL がプログラムの実行効率にどの程度効率的であるかを判断することもできないため、SQL の特別な最適化が行われることはほとんどありません。 SQLの実行効率がプログラムの実行効率に与える影響は徐々に大きくなるため、SQLの最適化が必要になります。

# SQL ステートメントを最適化するためのいくつかの方法:

1. SQL ステートメントの形式を統一する

# #多くの人は次の 2 つの SQL ステートメントが同じであると考えていますが、データベース クエリ オプティマイザーはこれらが異なるものであると考えます。

#select * from Dual

select * From Dual

ケースが異なるだけですが、クエリ アナライザーこれらは 2 つの異なる SQL ステートメントであるとみなされ、2 回解析する必要があります。 2 つの実行プランを生成します。したがって、プログラマは、同じクエリ ステートメントがどこでも一貫していることを確認する必要があります。スペースが 1 つ多くても機能しません。

2. * より を使用し、「*」を特定のフィールド リストに置き換え、未使用のフィールドを返さないでください。

3. クエリを最適化するには、テーブル全体のスキャンを避けるようにしてください。

1) where および order by に関係する列にインデックスを作成することを検討する必要があります。

2) where 句内のフィールドで null 値の判断を行わないようにしてください。そうしないと、エンジンはインデックスの使用を断念し、次のようなテーブル全体のスキャンを実行します。 used on num デフォルト値 0 を設定し、テーブルの num 列に null 値がないことを確認してから、次のようにクエリを実行します:

select id from t where num is null
ログイン後にコピー

3)。!= または <> の使用は避けてください。 ; where 句内の演算子、そうでない場合は、エンジンがインデックスの使用を放棄し、フル テーブル スキャンを実行します

4)条件を接続するために where 句内で または を使用しないようにしてください。そうしないと、エンジンがインデックスの使用をあきらめて、テーブル全体のスキャンを実行します。たとえば、

select id from t where num=0
ログイン後にコピー

は次のようにクエリできます:

select id from t where num=10 or num=20
ログイン後にコピー

5)。in と in は慎重に使用してください。そうしないと、次のような問題が発生します。

select id from t where num=10    
union all    
select id from t where num=20
ログイン後にコピー

のような完全なテーブル スキャン。連続値の場合は、次の場合は使用できません。

select id from t where num in(1,2,3)
ログイン後にコピー

6)、ファジー クエリのように適切に使用します。

場合によっては、

select id from t where num between 1 and 3
ログイン後にコピー

キーワード %yue% のようなファジー クエリを実行する必要があることがあります。「%」が yue の前に使用されているため、クエリはテーブル全体をスキャンする必要があります。必要な場合を除き、% を追加しないでください。キーワードの前に

7 を置き​​ます。where 句でフィールドを表現しないようにしてください。これにより、エンジンはインデックスの使用を断念し、テーブル全体のスキャンを実行します。例:

select * from contact where username like ‘%yue%’
ログイン後にコピー

select id from t where num/2=100
ログイン後にコピー

8 に変更する必要があります)、where 句内のフィールドに対して関数演算を実行しないようにする必要があります。これにより、エンジンがインデックスを作成し、テーブル全体のスキャンを実行します。例:

名前が abc で始まる ID をクエリする

select id from t where num=100*2
ログイン後にコピー

は、次のように変更する必要があります:

select id from t where substring(name,1,3)=&#39;abc&#39;
ログイン後にコピー

4. in

# の代わりに、exists を使用します。

# #多くの場合、in の代わりにexists を使用するのが良い選択です。Exists は存在をチェックするだけであり、そのパフォーマンスは in よりもはるかに優れています。例:

select id from t where name like &#39;abc%&#39;
ログイン後にコピー
次のステートメントに置き換えます:

select num from a where num in(select num from b)
ログイン後にコピー

5.長すぎる、冗長すぎる SQL ステートメントは作成せず、使用できる場合は簡潔にしてください。文を 2 つ使用しないでください

一般に、Select ステートメントの結果はサブセットとして使用され、そのサブセットからクエリが実行されます。この種のネストされたステートメントは比較的一般的です。しかし経験によれば、3 レベル以上のネストでは、クエリ オプティマイザーは簡単に間違った実行計画を与える可能性があります。唖然としたからだ。人工知能のようなものは最終的には人間の解像度に劣り、人間がめまいを感じれば、データベースもめまいを感じることは保証できます。 また、実行計画は再利用可能であり、SQL文が単純であればあるほど再利用できる可能性が高くなります。複雑な SQL ステートメントで 1 文字が変更されると、その文字を再解析する必要があり、大量のゴミがメモリに詰め込まれることになります。データベースがどれほど非効率になるかは考えられます。

6. 中間結果を一時的に保存する「一時テーブル」の使用を検討する

SQL ステートメントを簡素化する重要な方法は、一時テーブルを使用して中間結果を一時的に保存することです。ただし、一時テーブルの利点はこれらをはるかに超えています。一時結果は一時テーブルに一時的に保存され、後続のクエリは tempdb に保存されます。これにより、プログラム内のメイン テーブルの複数回のスキャンが回避され、 「共有ロック」はプログラム実行中に「更新ロック」をブロックし、ブロックを軽減し、同時実行パフォーマンスを向上させます。

7, インデックス フィールドを条件として使用する場合、インデックスが複合インデックスの場合、システムが確実にインデックスを使用するようにインデックスの最初のフィールドを条件として使用する必要があります。それ以外の場合、インデックスは使用されないため、フィールドの順序は可能な限りインデックスの順序と一致する必要があります。

8. 数値フィールドを使用するようにしてください。。フィールドに数値情報のみが含まれる場合は、文字フィールドとして設計しないようにしてください。これにより、クエリと接続のパフォーマンスが低下し、ストレージが増加します。オーバーヘッド。
これは、エンジンがクエリと接続を処理するときに文字列内の各文字を 1 つずつ比較し、数値型の場合は 1 回の比較だけで十分であるためです。

9. できる限り char ではなく varchar を使用してください なぜなら、第一に、可変長フィールドの記憶領域は小さく、記憶領域を節約できるからです。小さなフィールドの方が明らかに検索効率が高くなります。

10. システム テーブル リソースの消費を減らすために、一時テーブルの頻繁な作成と削除を避けてください。

11. カーソルは効率が悪いため、カーソルの使用は避けてください。カーソルで操作するデータが 10,000 行を超える場合は、データの書き換えを検討する必要があります。

12. 大規模なトランザクション操作を避け、システムの同時実行性を向上させるようにしてください。

13. クライアントに大量のデータを返さないようにしてください。データの量が大きすぎる場合は、対応する要件が妥当であるかどうかを検討する必要があります。 おすすめのビデオ チュートリアル: 「

MySQL チュートリアル

以上がこの記事の全内容です。皆様の学習にお役に立てれば幸いです。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの関連チュートリアルのコラムに注目してください。 ! !

以上がSQLステートメントを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Apr 17, 2024 pm 02:57 PM

HQL と SQL は Hibernate フレームワークで比較されます。HQL (1. オブジェクト指向構文、2. データベースに依存しないクエリ、3. タイプ セーフティ)、SQL はデータベースを直接操作します (1. データベースに依存しない標準、2. 複雑な実行可能ファイル)。クエリとデータ操作)。

Oracle SQLでの除算演算の使用法 Oracle SQLでの除算演算の使用法 Mar 10, 2024 pm 03:06 PM

「OracleSQLでの除算演算の使用方法」 OracleSQLでは、除算演算は一般的な数学演算の1つです。データのクエリと処理中に、除算演算はフィールド間の比率を計算したり、特定の値間の論理関係を導出したりするのに役立ちます。この記事では、OracleSQL での除算演算の使用法を紹介し、具体的なコード例を示します。 1. OracleSQL における除算演算の 2 つの方法 OracleSQL では、除算演算を 2 つの異なる方法で実行できます。

Oracle と DB2 の SQL 構文の比較と相違点 Oracle と DB2 の SQL 構文の比較と相違点 Mar 11, 2024 pm 12:09 PM

Oracle と DB2 は一般的に使用される 2 つのリレーショナル データベース管理システムであり、それぞれに独自の SQL 構文と特性があります。この記事では、Oracle と DB2 の SQL 構文を比較し、相違点を示し、具体的なコード例を示します。データベース接続 Oracle では、次のステートメントを使用してデータベースに接続します: CONNECTusername/password@database DB2 では、データベースに接続するステートメントは次のとおりです: CONNECTTOdataba

データベース技術コンテスト: Oracle と SQL の違いは何ですか? データベース技術コンテスト: Oracle と SQL の違いは何ですか? Mar 09, 2024 am 08:30 AM

データベース技術コンテスト: Oracle と SQL の違いは何ですか?データベース分野では、Oracle と SQL Server の 2 つは非常に評判の高いリレーショナル データベース管理システムです。どちらもリレーショナル データベースのカテゴリに属しますが、両者の間には多くの違いがあります。この記事では、Oracle と SQL Server の違い、実際のアプリケーションにおけるそれらの機能と利点について詳しく説明します。まず、Oracle と SQL Server の間には構文に違いがあります。

C++ プログラムの最適化: 時間の複雑さを軽減する手法 C++ プログラムの最適化: 時間の複雑さを軽減する手法 Jun 01, 2024 am 11:19 AM

時間計算量は、入力のサイズに対するアルゴリズムの実行時間を測定します。 C++ プログラムの時間の複雑さを軽減するためのヒントには、適切なコンテナー (ベクター、リストなど) を選択して、データのストレージと管理を最適化することが含まれます。クイックソートなどの効率的なアルゴリズムを利用して計算時間を短縮します。複数の操作を排除して二重カウントを削減します。条件分岐を使用して、不必要な計算を回避します。二分探索などのより高速なアルゴリズムを使用して線形探索を最適化します。

OracleとSQLの違いとアプリケーションシナリオの分析 OracleとSQLの違いとアプリケーションシナリオの分析 Mar 08, 2024 pm 09:39 PM

Oracle と SQL の違いとアプリケーション シナリオの分析 データベース分野では、Oracle と SQL は頻繁に言及される 2 つの用語です。 Oracle はリレーショナル データベース管理システム (RDBMS) であり、SQL (StructuredQueryLanguage) はリレーショナル データベースを管理するための標準化された言語です。これらはある程度関連していますが、いくつかの大きな違いもあります。まず、定義上、Oracle は特定のデータベース管理システムであり、以下で構成されます。

MySQL 接続数がデータベースのパフォーマンスに与える影響の分析 MySQL 接続数がデータベースのパフォーマンスに与える影響の分析 Mar 16, 2024 am 10:09 AM

MySQL 接続数がデータベースのパフォーマンスに与える影響の分析 インターネット アプリケーションの継続的な開発に伴い、データベースはアプリケーション システムをサポートする重要なデータ ストレージおよび管理ツールになりました。データベース システムにおいて、接続数はデータベース システムのパフォーマンスと安定性に直接関係する重要な概念です。この記事では、MySQL データベースの観点から開始し、データベースのパフォーマンスに対する接続数の影響を調査し、特定のコード例を通じて分析します。 1. 接続数はどれくらいですか?接続数とは、データベース システムが同時にサポートするクライアント接続の数を指し、管理することもできます。

WIN7システムのスタートアップ項目を最適化する方法 WIN7システムのスタートアップ項目を最適化する方法 Mar 26, 2024 pm 06:20 PM

1. デスクトップでキーの組み合わせ (win キー + R) を押してファイル名を指定して実行ウィンドウを開き、[regedit] と入力して Enter キーを押して確定します。 2. レジストリ エディターを開いた後、[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer] をクリックして展開し、ディレクトリに Serialize 項目があるかどうかを確認します。ない場合は、エクスプローラーを右クリックして新しい項目を作成し、Serialize という名前を付けます。 3. 次に、「シリアル化」をクリックし、右側のペインの空白スペースを右クリックして、新しい DWORD (32) ビット値を作成し、「Star」という名前を付けます。

See all articles