「count()」と「explain selected *」の間の行数の偏差
MySQL の「explain selected *」コマンドただし、この推定は、「count()」関数を使用して取得される実際の行数とは異なる場合があります。
説明
「explain selected *」ステートメントは、MySQL がクエリを実行する方法に関する情報を表示します。提供される詳細には、クエリがスキャンする行数の推定値が含まれます。この推定値は、クエリ対象のテーブルに関して MySQL によって維持される統計に基づいています。
ただし、これらの統計は、データ分布、テーブル構造、クエリ コンテキストなどの要因によって常に正確であるとは限りません。その結果、「explain selected *」の行数が反映されない可能性があります。クエリが処理する実際の行数と一致します。
例
次の例を考えてみましょう:
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 selected」 *" ステートメントでは、データを取得するために 1,274,785 行がスキャンされると推定されます。ただし、「count()」関数は実際の行数 1,291,958 行を返します。
影響
行数の不一致により、ユーザーはインデックスが存在すると誤解する可能性があります。クエリを最適化するために使用されます。ただし、これは当てはまらない可能性があり、クエリはまだかなりの数の行をスキャンしている可能性があります。
結論
一方、「explain selected *」は貴重な情報を提供します。クエリの実行に関しては、クエリによって処理される実際の行数の正確な尺度として依存すべきではありません。一致する行の正確な数を取得するには、「count()」関数を使用する必要があります。
以上が「explain selected *」の行数が「count()」と異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。