検索
ホームページデータベースmysql チュートリアルMySQL クエリの効率とクエリ速度の最適化を向上させる方法は何ですか?

1. EXPLAIN キーワードを使用してクエリ ステートメントの欠陥を評価します

作成者は、次の図に示すように、データベース内で単純な Select クエリ ステートメントを実行して、テーブル内のすべての情報を取得しました。ここで、データベース管理者は、このステートメントの実行時にデータベースがどのような作業を行ったか、またはこのクエリ ステートメントをさらに最適化する可能性があるかどうかを知りたいと考えています。この情報を知りたい場合は、クエリ ステートメントに Explain キーワードを追加できます。

MySQL クエリの効率とクエリ速度の最適化を向上させる方法は何ですか?

テーブル内のデータは、Select クエリ ステートメントを通じてデータベースからクエリできます。実行効率と最適化の余地は、この単純なクエリ ステートメントから導き出すことはできません。より詳細な情報を理解するには、Explain キーワードを追加する必要があります。次の図に示すように、

MySQL クエリの効率とクエリ速度の最適化を向上させる方法は何ですか?

Explain キーワードを追加した後、システムはテーブル内のデータをクエリせず、クエリ プロセス中に一部の情報を表示するだけです。この情報は、その後のデータベース クエリの最適化に非常に役立ちます。上記の情報から、ユーザーが単純なクエリを作成しただけであることがわかります。このクエリでは、インデックス、キーワード、Where ステートメントは使用されません。このため、このクエリ ステートメントはあまり合理的ではありません。最終的に正しい結果を見つけることはできますが、クエリの効率はあまり明らかではない場合があります。この目的のために、データベースの専門家は上記の情報に基づいて最適化を実行できます。次の図に示すように、クエリに WHERE ステートメントを追加すると、結果はどうなるでしょうか?

MySQL クエリの効率とクエリ速度の最適化を向上させる方法は何ですか?

Where ステートメントが最後の Extra フィールドで使用されると、システムはそれが使用されたことを表示します。データベースの最適化中に、NULL フィールドまたは結果に空のコンテンツを含むフィールドをキャプチャする必要があります。多くの場合、これらの場所が最適化の焦点となります。図に示すように、テーブルにキーワードまたはインデックスを設定することで、この Select ステートメントを最適化し、クエリの効率を向上させることができます。

2. データを比較するときに同じ型の列を使用してクエリ効率を向上させます

データをクエリする際、条件文に判定条件を追加することがあります。ユーザー基本情報テーブルとユーザー権限テーブルの 2 つのテーブルがあり、ユーザー番号ごとに関連付けられています。各ユーザーの権限情報を照会するには、ユーザー番号を照会条件として使用する必要があります。ここで、ユーザー基本情報テーブルのユーザー番号フィールドの型が CHAR、ユーザー権限テーブルのユーザー番号フィールドの型が VARCHAR であるとします。これら 2 つのデータ型はどちらも文字型ですが、同じ型ではありません。さて、これら 2 つのテーブルに対して相関クエリを実行するときのクエリ効率はどのくらいでしょうか? 最初に判断する必要があるのは、これらは異なる種類の文字データであっても、相互に互換性があるかどうかです。最終的には正しい結果を得ることができます。この点を明確にした上で、このクエリ ステートメントが最適化できるかどうかを考えてみましょう

別の仮定を立ててみましょう。現在、両方のテーブルのユーザー番号のデータ型は CHAR です。次に、これら 2 つのテーブルに対して関連するクエリを実行します。得られる結果は同じですか? テストの結果、クエリの結果は同じですが、費やした時間は異なります。データの量が増加するにつれて、2 つのクエリ間の時間差はますます長くなります。ここから、2 つのクエリ ステートメントは同等ですが、クエリ効率が異なることがわかります。

MySQL データベースではデータ型に互換性がありますが、比較は可能です。ただし、クエリの効率は影響を受けます。データベース クエリの効率を向上させるために、著者は、クエリ条件ステートメントで同じ種類の列を比較するのが最善であると推奨しています。同じ条件下では、同じ列タイプの方が、異なるタイプの列よりも優れたパフォーマンスを提供できます。これは、大量のデータを含むデータベースでは特に重要です。

ただし、この最適化にはデータ テーブルの列タイプを含める必要があります。このため、データ テーブルを設計する際にはこれを考慮する必要があります。上記の場合、これら 2 つのテーブルにユーザー ID 列を具体的に追加できます。一連の整数型を使用して、システムが自動的に番号を付けることができます。次に、クエリを実行するときに、元のユーザー番号列を介して比較するのではなく、このユーザー ID 列を介して比較します。相対的にクエリ操作の効率が高くなります。

3. Like キーワードの先頭にワイルドカードを使用する場合は注意してください

実際の作業で、著者は多くのデータベース管理者が悪い習慣を持っていることに気付きました。 Like などのキーワードを使用する場合、ワイルドカードがランダムに使用されます。たとえば、ユーザーは「LOOK」という接頭辞が付いたすべての製品情報を検索する必要があります。クエリを実行するとき、ユーザーは通常、「%LOOK%」のようなステートメントを使用することに慣れています。この条件ステートメントは、LOOK という接頭辞が付いた製品情報のみを取得するのではなく、製品名に LOOK という単語を含むすべてのレコードを取得します。

ただし、最終結果は同じになる可能性があります。ただし、この 2 つのクエリ効率は異なります。実際、この問題の大部分は、クライアント アプリケーションの不適切な設計によって引き起こされます。たとえば、クライアント アプリケーションを設計する場合、システムはデフォルトで % 記号を表示します。以下に示すように。

MySQL クエリの効率とクエリ速度の最適化を向上させる方法は何ですか?

この設計の意図は優れており、システムがあいまいクエリをサポートできるようになります。しかし、実際の操作ではユーザーが問題を抱えている可能性があります。ユーザーがクエリ時に % の前に LOOK という単語を入力せず、% の後に単語を入力した場合。クエリを実行すると、カーソルは自動的に % 記号の後ろに配置されるためです。通常、ユーザーは入力時にカーソルの位置を調整しません。この時、上記のような状況が発生しました。

予期せぬ状況を避けるために、著者は、「Like」の後にワイルドカードを続けるようなキーワードを使用するときは十分に注意することを強くお勧めします。特に大量のデータからレコードを検索する場合は、このワイルドカードの位置を適切な場所で使用する必要があります。最初に別のワイルドカードを使用できる場合は、ワイルドカードを使用しないようにしてください。

4. Like キーワードを他の形式で置き換えてみる

前述したように、Like キーワードを使用するときはワイルドカードの位置に注意する必要があります。クエリ効率の観点から、ワイルドカードの位置に注意し、「Like」キーワードの使用をできるだけ避ける必要があります。実際、SQL ステートメントでは、他のメソッドを使用して Like キーワードを置き換えることができます。たとえば、6 桁の番号を持つ商品テーブルがあります。次に、9 で始まる製品番号をクエリする必要があります。これを行うにはどうすればよいですか?

まず、LIKE "9%" などの Like キーワードを使用します。このワイルドカードの位置に注意してください。この条件ステートメントにより、必要な結果を見つけることができます。しかし、パフォーマンスの最適化の観点から見ると、このステートメントは適切な対処方法ではありません。いくつかの妥協によってこれを達成することもできます。

2 つ目は、シンボルを比較することによって実現されます。この文は次のように再定式化できます。 これは、900000 ~ 999999 の値を持つメソッドを使用することで実現できます。ただし、両方のクエリの結果は同じです。ただし、このステートメントのクエリ時間は、Like 記号を使用した上記のステートメントよりもはるかに短くなります。

以上がMySQL クエリの効率とクエリ速度の最適化を向上させる方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
MySQLと他のSQL方言の構文の違いは何ですか?MySQLと他のSQL方言の構文の違いは何ですか?Apr 27, 2025 am 12:26 AM

MySQLdiffersfromotherSQLdialectsinsyntaxforLIMIT,auto-increment,stringcomparison,subqueries,andperformanceanalysis.1)MySQLusesLIMIT,whileSQLServerusesTOPandOracleusesROWNUM.2)MySQL'sAUTO_INCREMENTcontrastswithPostgreSQL'sSERIALandOracle'ssequenceandt

MySQLパーティションは何ですか?MySQLパーティションは何ですか?Apr 27, 2025 am 12:23 AM

MySQLパーティション化により、パフォーマンスが向上し、メンテナンスが簡素化されます。 1)大きなテーブルを特定の基準(日付範囲など)、2)物理的に独立したファイルに物理的に分割する、3)MySQLはクエリするときに関連するパーティションに焦点を合わせることができます。

MySQLで特権をどのように許可して取り消しますか?MySQLで特権をどのように許可して取り消しますか?Apr 27, 2025 am 12:21 AM

mysqlで許可を許可および取り消す方法は? 1。grantallprivilegesondatabase_name.to'username'@'host 'などの許可を付与するために付与ステートメントを使用してください。 2。Revokeallprivilegesondatabase_name.from'username'@'host 'など、Revoke Statementを使用して、許可のタイムリーな通信を確保します。

InnoDBとMyisamストレージエンジンの違いを説明してください。InnoDBとMyisamストレージエンジンの違いを説明してください。Apr 27, 2025 am 12:20 AM

INNODBは、トランザクションサポートと高い並行性を必要とするアプリケーションに適していますが、Myisamはより多くの読み取りとより少ない書き込みを必要とするアプリケーションに適しています。 1.INNODBは、eコマースおよび銀行システムに適したトランザクションおよび銀行レベルのロックをサポートしています。 2. Myisamは、ブログやコンテンツ管理システムに適した、迅速な読み取りとインデックス作成を提供します。

MySQLの結合のさまざまなタイプは何ですか?MySQLの結合のさまざまなタイプは何ですか?Apr 27, 2025 am 12:13 AM

MySQLには4つのメイン結合タイプがあります:innerjoin、leftjoin、rightjoin、fullouterjoin。 1.InnerJoinは、結合条件を満たす2つのテーブルのすべての行を返します。 2.右のテーブルに一致する行がない場合でも、Leftjoinは左のテーブルのすべての行を返します。 3。右joinはleftjoinに反しており、右のテーブルのすべての行を返します。 4.fullouterjoinは、結合条件を満たしている、または満たさない2つのテーブルのすべての行を返します。

MySQLで利用可能なさまざまなストレージエンジンは何ですか?MySQLで利用可能なさまざまなストレージエンジンは何ですか?Apr 26, 2025 am 12:27 AM

mysqloffersvariousstorageEngines、それぞれのfordifferentusecases:1)Innodbisidealforapplicationsingingidcomplianceanceandhighconcurrency、support transactions andforeignkeys.2)myisamisbestforread-havyworkloads、transactionsupptort.3)

MySQLの一般的なセキュリティの脆弱性は何ですか?MySQLの一般的なセキュリティの脆弱性は何ですか?Apr 26, 2025 am 12:27 AM

MySQLの一般的なセキュリティの脆弱性には、SQLインジェクション、弱いパスワード、不適切な許可構成、および非合事ソフトウェアが含まれます。 1。SQL注射は、前処理ステートメントを使用することで防ぐことができます。 2。強力なパスワード戦略を強制的に使用することにより、弱いパスワードを回避できます。 3.不適切な許可構成は、ユーザー許可の定期的なレビューと調整を通じて解決できます。 4.未使用のソフトウェアは、MySQLバージョンを定期的にチェックして更新することでパッチを適用できます。

MySQLでスロークエリをどのように識別できますか?MySQLでスロークエリをどのように識別できますか?Apr 26, 2025 am 12:15 AM

MySQLの遅いクエリを識別することは、遅いクエリログを有効にし、しきい値を設定することで実現できます。 1.スロークエリログを有効にし、しきい値を設定します。 2.スロークエリログファイルを表示および分析し、詳細な分析のためにMySQLDumpSlowやPT-Query-Digestなどのツールを使用します。 3.インデックスの最適化、クエリの書き換え、およびselect*の使用を回避することで、遅いクエリの最適化を実現できます。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。