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 までご連絡ください。

                ホット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)

                PHP 基礎チュートリアル: 初心者からマスターまで PHP 基礎チュートリアル: 初心者からマスターまで Jun 18, 2023 am 09:43 AM

                PHP は、Web 開発のすべてのタスクを処理できる、広く使用されているオープン ソースのサーバー側スクリプト言語です。 PHP は Web 開発で広く使用されており、特に動的データ処理における優れたパフォーマンスのため、多くの開発者に愛され、使用されています。この記事では、初心者が入門から上級者になるまでをサポートするために、PHP の基本をステップごとに説明します。 1. 基本構文 PHP は、コードが HTML、CSS、および JavaScript に似ているインタープリター型言語です。すべての PHP ステートメントはセミコロンで終わります。

                Linux をゼロから学ぶことはできますか? 何を学ぶ必要がありますか? Linux をゼロから学ぶことはできますか? 何を学ぶ必要がありますか? Feb 19, 2024 pm 12:57 PM

                IT業界で働きたいけどプログラミングを学びたいと思ったら、どのテクノロジーを選べばいいでしょうか?それはもちろんLinuxの運用保守です。 Linux は市場で非常に人気のあるテクノロジーであり、幅広い用途があり、雇用の可能性も高く、多くの人に好まれています。そこで質問は、基礎ゼロで Linux の運用と保守を学ぶことができるでしょうか? サーバー市場では、安定性、セキュリティ、無料のオープンソース、効率性、利便性などの利点により、Linux システムは最大 80% の市場シェアを持っています。このことから、Linux アプリケーションが非常に人気があることがわかります。現在でも将来でも、Linux を学ぶことは非常に良い選択です。ゼロから学ぶことは可能かというと、私の答えはもちろんです。 Oldboy Education Linux 対面クラスは、基礎知識がまったくない人向けに特別に設計されています

                Go 言語変数の基礎を学ぶ Go 言語変数の基礎を学ぶ Mar 22, 2024 pm 09:39 PM

                Go 言語は、Google によって開発された静的型付けのコンパイル言語であり、その簡潔で効率的な機能が開発者から広く注目され、愛されています。 Go 言語を学習するプロセスでは、変数の基本知識を習得することが重要なステップです。この記事では、Go 言語における変数の定義、代入、型推論などの基本的な知識を具体的なコード例を通じて説明し、読者がこれらの知識をより深く理解し習得できるようにします。 Go 言語では、キーワード var を使用して変数を定義できます。これは、var 変数名変数タイプの形式です。

                PHP の基本入門: echo 関数を使用してテキスト コンテンツを出力する方法 PHP の基本入門: echo 関数を使用してテキスト コンテンツを出力する方法 Jul 30, 2023 pm 05:38 PM

                PHP の基本入門: echo 関数を使用してテキスト コンテンツを出力する方法 PHP プログラミングでは、テキスト コンテンツを Web ページに出力する必要がよくあります。この場合、echo 関数を使用できます。この記事では、echo 関数を使用してテキストコンテンツを出力する方法といくつかのサンプルコードを紹介します。始める前に、まず PHP がインストールされ、実行環境が構成されていることを確認してください。 PHP がまだインストールされていない場合は、PHP 公式 Web サイト (https://www.php.net) から最新の安定バージョンをダウンロードできます。

                C言語の関数を詳しく解説:基礎から応用まで、関数の使い方を徹底分析 C言語の関数を詳しく解説:基礎から応用まで、関数の使い方を徹底分析 Feb 18, 2024 pm 02:25 PM

                C 言語関数事典: 基本から応用まで、関数の使用方法の詳細な説明、具体的なコード例が必要です はじめに: C 言語は広く使用されているプログラミング言語であり、その強力な機能と柔軟性により、多くの開発者が最初に選択します。 C 言語では関数は重要な概念であり、コードの一部を独立したモジュールに結合して、コードの再利用性と保守性を向上させることができます。この記事では、C 言語関数の使い方を基礎から紹介し、読者が関数記述のスキルを習得できるように段階的に進めていきます。 1. C言語での関数の定義と呼び出し

                PHP 学習ノート: オブジェクト指向プログラミングの基礎 PHP 学習ノート: オブジェクト指向プログラミングの基礎 Oct 09, 2023 pm 12:46 PM

                PHP 学習ノート: オブジェクト指向プログラミングの基礎、具体的なコード例が必要 はじめに: オブジェクト指向プログラミング (略して OOP) は、複雑な問題を解決するために、問題を複数のオブジェクトに分解し、オブジェクト間の相互作用を定義するプログラミングの考え方です。プログラミングの問題。 PHP は強力なプログラミング言語として、オブジェクト指向プログラミングもサポートしています。この記事では、PHP におけるオブジェクト指向プログラミングの基本概念と一般的な構文を紹介し、具体的なコード例を示します。親切

                PHP関数の使い方:基礎から応用まで PHP関数の使い方:基礎から応用まで Jun 15, 2023 pm 11:11 PM

                PHP は、動的 Web サイト、Web アプリケーション、およびその他のインターネット サービスの開発に使用される、広く使用されているサーバー側スクリプト言語です。 PHP アプリケーションの開発プロセスでは、関数を使用するとコードが簡素化され、コードの再利用性が向上し、開発コストが削減されます。この記事では、PHPの機能の基本的な使い方から応用的な使い方までを紹介します。 1. PHP 関数の基本的な使用法 1. 関数の定義 PHP では、次のように function キーワードを使用して関数を定義します。 functiongreet($name){

                Microsoft から無料の Basic C# 認定資格を今すぐ取得できるチャンスをお見逃しなく Microsoft から無料の Basic C# 認定資格を今すぐ取得できるチャンスをお見逃しなく Sep 01, 2023 pm 12:45 PM

                すべての C# 開発者に呼びかけます! Microsoft と非営利団体 freeCodeCamp は、新しいグローバルな無料の Basic C# 認定資格の開始を発表しました。この認定資格は、あらゆるレベルの開発者が、さまざまなアプリケーションの作成に使用される人気のあるプログラミング言語である C# の基礎を学習できるように設計されており、LinkedIn プロフィールに表示できます。この認定資格には、35 時間の Microsoft Learn トレーニング コースと、freeCodeCamp でホストされる 80 問の試験が含まれています。このコースでは、変数、データ型、制御構造、オブジェクト指向プログラミングなどのトピックを扱います。 「私たちの Basic C# 認定資格は、まさにこの多用途性を習得する能力の証明を提供します。

                See all articles