「explain」と「count()」によって返される行数の不一致: 詳細を見る
"explain" によって返される行数と、"count()" から取得される実際の行数。 「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 サイトの他の関連記事を参照してください。