ホームページ >データベース >mysql チュートリアル >「explain」が「count()」とは異なる行数を報告するのはなぜですか?

「explain」が「count()」とは異なる行数を報告するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-06 21:33:02512ブラウズ

Why Does

「explain」と「count()」によって返される行数の不一致: 詳細を見る

"explain" によって返される行数と、"count()" から取得される実際の行数。 「explain」によってフェッチされた行数の正確な推定値が得られると直感的に思われるかもしれませんが、必ずしもそうとは限りません。

「explain」コマンドの理解

「explain」コマンドは実際にはクエリを実行しません。代わりに、クエリ プランを分析し、処理される行数を推定します。この推定値は、関係するテーブルに関して維持される統計など、さまざまな要因に基づいています。

「explain」によって報告される行が異なる理由

「explain」間の不一致" 出力と実際の行数は、次の理由による可能性があります:

  • 推定の不正確さ: "explain" で使用される推定は、特に次のような複雑なクエリの場合、常に正確であるとは限りません。複数のテーブルまたは結合。
  • 古い統計: 「explain」が依存する統計は最新ではない可能性があり、推定が不正確になる可能性があります。

不一致の例

次の例を考えてみましょう:

mysql> select count(*) from table where relation_title='xxxxxxxxx';
+----------+
| count(*) |
+----------+
|  1291958 |
+----------+
mysql> explain select *  from table where relation_title='xxxxxxxxx';
+----+-------------+---------+-
| id | select_type | rows    |
+----+-------------+---------+-
|  1 | SIMPLE      | 1274785 | 
+----+-------------+---------+-

ご覧のとおり、「explain」はクエリが 1274785 行を処理すると推定しますが、 「count(*)」は 1291958 行のカウントを返します。この不一致は、上で説明した推定の不正確さと古い統計が原因で発生します。

正確な行数の重要性

クエリを最適化し、不要なオーバーヘッドを回避するには、正確な行数を取得することが重要です。 。 「explain」の制限を理解することで、開発者は、その推定値に依存するか、処理される行数を決定するための代替方法を模索するかについて、情報に基づいた決定を下すことができます。

以上が「explain」が「count()」とは異なる行数を報告するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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