ホームページ バックエンド開発 PHPチュートリアル インタビューの質問: MYSQL データベース クエリを最適化する方法について話す

インタビューの質問: MYSQL データベース クエリを最適化する方法について話す

Aug 08, 2016 am 09:19 AM
count database

1. データ型を最適化する

MySQL には多くのデータ型があり、DBA であれば最適化の原則に従ってデータ型を厳密にチェックしますが、開発者は最も単純だと思うものを選択する場合があります。コーディングを高速化するためのオプション、または最も明白な選択肢を選択するため、最適な選択に直面しない可能性があるため、可能であれば、一般的なガイドラインを使用してこれらの決定を変更するようにしてください。

(1)NULLの使用を避ける

NULLはほとんどのデータベースで特別な処理を必要とし、MySQLも例外ではありません、より多くのコード、より多くのチェック、そして特別なインデックス作成ロジックを必要とする開発者もいます。テーブル作成時のデフォルト値ですが、ほとんどの場合、NOT NULL を使用するか、デフォルト値として 0、-1 などの特別な値を使用する必要があります。

(2) より小さいフィールドのみを使用することが可能です

MySQL はディスクからデータを読み取ってメモリに保存し、それを読み取るために CPU サイクルとディスク I/O を使用します。占有するデータ型が小さいほど、ディスクからの読み取りやメモリへのパックがより効率的になります。ただし、将来アプリケーションが変更された場合、スペースがなくなるため、データ型を減らすことにあまり固執しないでください。 。テーブルを変更するには再構築が必要になり、間接的にコード変更が発生する可能性があるため、バランスを見つける必要があります。

2. 文字セットの変換には注意してください

クライアントまたはアプリケーションで使用される文字セットは、実行中のプロセス中に暗黙的に変換する必要があります。 、UTF-8 などの文字セットがマルチバイト文字をサポートしていることを確認してください。そのため、より多くの記憶領域が必要になります。

3. count(my_col) と count(*) を最適化します

MyISAM テーブルを使用する場合、where 句なしで count(*) を使用すると、行数がカウントされるため、非常に高速になります。したがって、MySQL は行数を取得するために行ごとに検索しません。my_col 列に null 値がない場合、状況は前述と同じになります。つまり、count(my_col) は非常に高速になります。

where 句がある場合に count() を使用すると、基本的に、where 句内で明らかなインデックス列を超えることはできません。

上記の提案に加えて、サマリー テーブルを使用して、テーブルの内容を常に最新の状態に保つことも、実行することもできます。 1 つは定期的に、バッチ ジョブは最新のデータ情報を入力し続けます。後者の場合、バッチ ジョブの実行頻度に応じて、情報は正確ではなくなります。これは、アプリケーションの正確な情報の必要性と比較する必要があります。データを更新し続けるためのシステム オーバーヘッドには、この 2 つのバランスが必要です。

4. サブクエリを最適化する

サブクエリが発生した場合、MySQL クエリ最適化エンジンが常に最も効果的であるとは限らないのは、オプティマイザーがすでに接続クエリを正しく処理しているためです。もちろん、接続テーブル (2 番目のテーブル) の接続列にインデックスが付けられていることを確認する必要があります。通常、MySQL は 2 番目のテーブルに対してクエリ サブセットを実行します。これは、フル テーブル スキャンです。ネストされたループ アルゴリズムの一部。

5. UNION の最適化

複数の異なるデータベースにわたって UNION を使用することは、興味深い最適化方法です。つまり、データは重複しないようにする必要があります。並べ替え、特に大きなテーブルの並べ替えには非常にリソースが消費されることがわかっています。

UNION ALL を使用すると、プロセスを大幅に高速化できます。データに重複行が含まれないことがすでにわかっている場合、または重複行が表示されるかどうかを気にしない場合は、どちらの場合も UNION ALL を使用する方が適しています。さらに、アプリケーション ロジックでいくつかのメソッドを使用して行の重複を避けることができます。これにより、UNION ALL と UNION によって返される結果は同じになりますが、UNION ALL は並べ替えられません。

[ビットネットワーク]からの原文: http://soft.chinabyte.com/database/254/11335754.shtml

関連書籍

mysqlの最適化(mysqlで実行効率の低いSQL文をクエリする方法)

mysql 数千万レベルのデータベース内で同じ構造を持つ複数のテーブルに対して結合クエリを実行するにはどうすればよいでしょうか?クエリ速度を向上させるために最適化または設定するにはどうすればよいですか?

mysqlデータベース内の数千万のデータのクエリ最適化とページングテスト

mysql学習体験

Mysqlデータベースを最適化する8つの方法

上記はインタビューの質問を紹介しています。内容の側面を含め、MYSQL データベース クエリを最適化する方法について話しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

discuzデータベースエラーを解決する方法 discuzデータベースエラーを解決する方法 Nov 20, 2023 am 10:10 AM

discuz データベース エラーの解決策は次のとおりです: 1. データベース構成を確認します; 2. データベース サーバーが実行されていることを確認します; 3. データベース テーブルのステータスを確認します; 4. データをバックアップします; 5. キャッシュをクリアします; 6. Discuz を再インストールします; 7. サーバー リソースを確認します。 ; 8. Discuz 公式サポートに連絡します。 Discuz データベース エラーを解決するには、複数の側面から始めて、徐々に問題の原因を調査し、対応する措置を講じて修復する必要があります。

リークにより、Intel Arrow Lake-U、-H、-HX、-S の主要な仕様が明らかに リークにより、Intel Arrow Lake-U、-H、-HX、-S の主要な仕様が明らかに Jun 15, 2024 pm 09:49 PM

IntelArrowLake は、LunarLake と同じプロセッサ アーキテクチャに基づいていると予想されており、つまり、Intel の新しい Lion Cove パフォーマンス コアが経済的な Skymont 効率コアと組み合わされることになります。

カウンタとカウントの違い カウンタとカウントの違い Nov 20, 2023 am 10:01 AM

Count 関数は、指定された範囲内の数値の数をカウントするために使用されます。テキスト、論理値、NULL 値は無視されますが、空のセルはカウントされます。Count 関数は、実際の数値を含むセルの数のみをカウントします。 CountA 関数は、指定された範囲内の空でないセルの数をカウントするために使用されます。実際の数値を含むセルを数えるだけでなく、テキスト、論理値、数式を含む空でないセルの数も数えます。

データベース 'database_name' を削除できません; データベースが存在しません - MySQL エラーを解決する方法: データベースを削除できません、データベースが存在しません データベース 'database_name' を削除できません; データベースが存在しません - MySQL エラーを解決する方法: データベースを削除できません、データベースが存在しません Oct 05, 2023 am 11:46 AM

MySQL エラーの解決方法: データベースを削除できません。データベースが存在しません 概要: MySQL は、一般的に使用されるリレーショナル データベース管理システムです。 MySQL を使用する場合、データベースの作成、データベースの削除、その他の操作を含むデータベースの管理が必要になることがよくあります。ただし、データベースを削除するときに、「Can'tdropdatabase'database_name';databaseoesn'texist」というエラー メッセージが表示され、データベースを削除できない場合があります。

MySQL Count関数の使い方の違いまとめ MySQL Count関数の使い方の違いまとめ Nov 29, 2022 pm 04:47 PM

この記事では、MySQL の Count 関数の使い方の違いを紹介します。統計データの必要性は、日常の開発において非常に簡単に遭遇します。MySQL は、さまざまな計算関数もサポートしています。次に、それらの違いを見てみましょう。そして落とし穴があるかどうか。

PHPのcount関数の使い方は何ですか PHPのcount関数の使い方は何ですか Sep 09, 2021 pm 05:08 PM

PHP での count 関数の使用法は次のとおりです: [count(array,mode);]。パラメータ array はカウントする配列を指定し、パラメータ mode は関数のモードを指定します。

mysqlで個別の複数の列をカウントする問題を解決する方法 mysqlで個別の複数の列をカウントする問題を解決する方法 Jun 03, 2023 am 10:49 AM

再現されたテスト データベースは次のとおりです。 CREATETABLE`test_distinct`(`id`int(11)NOTNULLAUTO_INCREMENT,`a`varchar(50)CHARACTERSETutf8DEFAULTNULL,`b`varchar(50)CHARACTERSETutf8DEFAULTNULL,PRIMARYKEY(`id`))ENGINE= InnoDBAUTO_INCREMENT =1DEFAULTCHARSET=latin1;テーブル内のテスト データは次のとおりです。次に、これら 3 つの列の重複排除された列をカウントする必要があります。

Java Count はストリーム内の要素をどのようにカウントしますか? Java Count はストリーム内の要素をどのようにカウントしますか? May 11, 2023 pm 04:07 PM

注1. Countはストリーム内の要素の総数をカウントするターミナルオペレーションであり、戻り値はlong型です。 2. count() は、ストリーム内の要素の数を返します。これは帰納の特殊なケースです (帰納操作は一連の入力要素を受け取り、結合操作を繰り返し適用することでそれらを組み合わせて要約結果を作成します)。これは終末期の手術であり、結果や副作用が生じる可能性があります。端末操作の実行後、パイプは消費されたとみなされ、再利用できません。例 // リスト内に a で始まる文字列があるかどうかを確認し、最初の文字列と一致するかどうかを確認します。つまり、 truebooleananyStartsWithA=stringCollection.stream().anyMatch((s) を返します。

See all articles