検索

Mysq に関するよくある誤解

Jun 20, 2017 pm 03:37 PM
ベース

よくある誤解

    1. count(1) と count(primary_key) は count(*) よりも優れています

    多くの人は、数を数えるために count の代わりに count(1) と count(primary_key) を使用します(*) の方がパフォーマンスが良いと考えられていますが、実際にはこれは誤解です。一部のシナリオでは、データベースが count(*) カウント操作に対して特別な最適化を行っているため、パフォーマンスが低下する可能性があります。
      1. count(column)とcount(*)は同じです

      この誤解は多くの上級エンジニアやDBAの間でもよく見られ、多くの人がそれを当然と思っています。実際、count(column) と count(*) はまったく異なる演算であり、まったく異なる意味を持ちます。
      count(column) は、列フィールドが空ではない結果セット内のレコードの数を意味します。
          select a,b 結果セット全体に存在するレコードの数を意味します。 from ... は select a ,b,c from... よりも優れており、データベースがより少量のデータにアクセスできるようになります
        1. この誤解は主に多くの開発者の間に存在します。主な理由は、開発者がそれを知らないことです。データベースのストレージ原則について詳しく説明します。
        実際、ほとんどのリレーショナル データベースは行に格納され、データ アクセス操作は固定サイズの IO ユニット (ブロックまたはページと呼ばれる) (通常は 4KB) に基づいて行われます。ほとんどの場合、複数の行が に格納されます。各 IO ユニットと各行には、その行のすべてのフィールドが格納されます (lob などの特殊なタイプのフィールドを除く)。
        つまり、1 つのフィールドを取得するか複数のフィールドを取得するかに関係なく、データベースがテーブル内でアクセスする必要があるデータの量は実際には同じです。
        もちろん、例外もあります。つまり、クエリはインデックス内で完了できます。つまり、2 つのフィールド a と b のみがフェッチされる場合、テーブルを返す必要はなく、フィールド c は返されます。使用されているインデックスにない場合は、テーブルに戻ってデータを取得する必要があります。この場合、両者の IO 量は大きく異なります。
            order by には並べ替え操作が必要です
          1. 必要なデータがインデックスと同じ順序であり、クエリが実行された場合、インデックスデータが実際に順序付けされていることがわかりますの場合、データベースはデータがすでに並べ替えのニーズを満たしていることを認識しているため、通常、並べ替え操作を省略してデータを直接返します。
          実際、ソート要件を伴う SQL を最適化するためにインデックスを使用することは、非常に重要な最適化方法です
          参考文献: MySQL ORDER BY の実装の分析、MySQL における GROUP BY の基本実装原理、および MySQL の基本実装原理これら 3 つを区別してください この記事、特に最初の記事には、より詳細な分析があります
              実行計画に filesort が含まれている場合、ディスク ファイルは並べ替えられます
            1. 実際、この誤解は私たちのせいではありませんが、MySQL の開発が原因です。作者の表現に問題があります。 filesort は、Explain コマンドを使用して SQL の実行計画を表示するときに、「追加」列に表示される情報です。
            実際、SQL ステートメントでソート操作が必要な場合は常に、「Using filesort」と表示されますが、これはファイルのソート操作が行われることを意味するものではありません。
            詳細な資料: MySQL Explain コマンドの出力での filesort について、ここで詳しく説明しています
              基本原則
                可能な限り結合を少なくする
              1. MySQL の利点はシンプルさです, しかし、これは実はいくつかの面でデメリットでもあります。 MySQL オプティマイザーは非常に効率的ですが、統計情報の量が限られているため、オプティマイザーの作業プロセスに逸脱が発生する可能性が高くなります。複雑な複数テーブルの結合については、オプティマイザーが限られているため、また、結合に対する取り組みが不十分であるため、パフォーマンスは依然として Oracle などのリレーショナル データベースの前任者に比べてはるかに遅れています。ただし、単純な単一テーブル クエリの場合、この差は非常に小さくなり、シナリオによってはこれらの以前のデータベースよりも優れていることもあります。
                  ソートをできるだけ少なくする
                1. ソート操作はより多くの CPU リソースを消費するため、ソートを減らすと、キャッシュ ヒット率が高く、十分な IO 機能があるシナリオでは SQL の応答時間に大きな影響を与える可能性があります。
                MySQL の場合、ソートを減らす方法は次のとおりたくさんあります。
                • 上記の誤解は、インデックスを使用してソートすることで最適化されます

                • ソートに参加するレコードの数を減らします

                • 必要な場合以外はデータをソートしないでください

                • リソースを消費する操作、SQLステートメントの使用を避けるDISTINCT、UNION、MINUS、INTERSECT、ORDER BY を使用すると、リソースを消費する並べ替え (SORT) 関数を実行するために SQL エンジンが起動されます。DISTINCT では 1 つの並べ替え操作が必要ですが、他の関数では少なくとも 2 つの並べ替え操作が必要です

                以上がMysq に関するよくある誤解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

                声明
                この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
                MySQLはデータレプリケーションをどのように処理しますか?MySQLはデータレプリケーションをどのように処理しますか?Apr 28, 2025 am 12:25 AM

                MySQLは、非同期、半同期、およびグループ複製の3つのモードを介してデータの複製を処理します。 1)非同期の複製パフォーマンスは高くなりますが、データが失われる可能性があります。 2)半同期複製により、データセキュリティが向上しますが、遅延が増加します。 3)グループレプリケーションは、高可用性要件に適したマルチマスターレプリケーションとフェールオーバーをサポートします。

                説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?Apr 28, 2025 am 12:24 AM

                説明ステートメントは、SQLクエリのパフォーマンスを分析および改善するために使用できます。 1.説明ステートメントを実行して、クエリプランを表示します。 2。出力結果を分析し、アクセスの種類、インデックスの使用量に注意し、順序を結合します。 3.分析結果に基づいてインデックスを作成または調整し、結合操作を最適化し、フルテーブルスキャンを回避してクエリ効率を向上させます。

                MySQLデータベースをバックアップして復元するにはどうすればよいですか?MySQLデータベースをバックアップして復元するにはどうすればよいですか?Apr 28, 2025 am 12:23 AM

                論理バックアップにMySQLDUMPとホットバックアップにMySQLenterPriseBackupを使用することは、MySQLデータベースをバックアップする効果的な方法です。 1. mysqldumpを使用してデータベースをバックアップします:mysqldump-uroot-pmydatabase> mydatabase_backup.sql。 2。ホットバックアップにmysqlenterprisebackupを使用:mysqlbackup - user = root-password = password - backup-dir =/path/to/backupbackup。回復するときは、対応する寿命を使用します

                MySQLのスロークエリの一般的な原因は何ですか?MySQLのスロークエリの一般的な原因は何ですか?Apr 28, 2025 am 12:18 AM

                MySQLのクエリが遅い主な理由には、インデックスの欠落または不適切な使用、クエリの複雑さ、過剰なデータボリューム、および不十分なハードウェアリソースが含まれます。最適化の提案には以下が含まれます。1。適切なインデックスを作成します。 2。クエリステートメントを最適化します。 3.テーブルパーティションテクノロジーを使用します。 4.適切にハードウェアをアップグレードします。

                mysqlのビューは何ですか?mysqlのビューは何ですか?Apr 28, 2025 am 12:04 AM

                MySQLビューは、SQLクエリの結果に基づいた仮想テーブルであり、データを保存しません。 1)ビューは複雑なクエリを簡素化し、2)データセキュリティを強化し、3)データの一貫性を維持します。ビューは、テーブルのように使用できるデータベースにクエリを保存しますが、データは動的に生成されます。

                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を使用して、許可のタイムリーな通信を確保します。

                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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

                ホットツール

                PhpStorm Mac バージョン

                PhpStorm Mac バージョン

                最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

                VSCode Windows 64 ビットのダウンロード

                VSCode Windows 64 ビットのダウンロード

                Microsoft によって発売された無料で強力な IDE エディター

                SublimeText3 Mac版

                SublimeText3 Mac版

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

                MantisBT

                MantisBT

                Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

                ドリームウィーバー CS6

                ドリームウィーバー CS6

                ビジュアル Web 開発ツール