14
    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 | 
+----+-------------+---------+-

「select * from table where relationship_title='xxxxxxxxx'; を説明してください」と思います。relationship_title='xxxxxxxxx' の行をインデックスで返します。しかし、それは本当の数よりも小さいです。

4

4 に答える 4

14

結果を取得するために実行された行数を示しています。

データが間違っている理由は、EXPLAIN が正確ではないためです。テーブルについて保存されている情報に基づいてデータを推測します。

これは非常に有用な情報です。たとえば、多くのテーブルで JOINS を実行し、結合されたテーブル全体で各行の 1 行の情報を実行していないことを確認したい場合などです。

これは、608 行のテーブルでのテストです。

SELECT COUNT(id) FROM table WHERE user_id = 1

結果:

COUNT(id)
512

そして、ここに説明があります

EXPLAIN SELECT COUNT(id) FROM table WHERE user_id = 1

結果:

id  rows
1   608
于 2009-06-24T10:09:23.347 に答える
6

EXPLAINクエリは、innodbテーブルの行数の概算を含むテーブルで提供される値を使用します。INFORMATION_SCHEMA.TABLESINFORMATION_SCHEMAmysqlドキュメントのメモセクションを参照してください。

于 2009-06-24T10:22:20.873 に答える