一尘不染

为什么行通过“解释”返回不等于count()?

mysql

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

我认为“请从“ relation_title =’xxxxxxxxx’的表中选择*”;通过索引返回relationship_title
=’xxxxxxxxx’的行。但这比实际数字小。


阅读 282

收藏
2020-05-17

共1个答案

一尘不染

它显示了要获得结果所经过的行数。

数据错误的原因是EXPLAIN不准确,它会基于存储在表中的信息来猜测数据。

这是非常有用的信息,例如在许多表上执行JOINS时,并且您要确保没有遍历整个联接表以获取每一行的信息。

这是对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
2020-05-17