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 select*from table where relationship_title='';”按索引返回关系标题=''的行。但它比真正的数字小。
3条答案
按热度按时间ma8fv8wu1#
执行
ANALYZE TABLE table_name;
-它将更新解释用途的统计数据,您将得到正确的数字。例如:当表中根本没有数据时,explain将建议该表为空,并优化查询以首先基于该表进行筛选(因为它不会从磁盘、内存等中读取任何内容)。如果不执行,那么何时加载数据ANALYZE TABLE table_name;
,优化器仍然建议表仍然为空,并且不使用查询的最佳执行计划。explain的行为方式相同—它不查找表中当前的行数,而是查找由ANALYZE TABLE table name
(在某些情况下会自动执行—例如,表中行数的1/16已更改)。beq87vna2#
这个
EXPLAIN
查询将使用INFORMATION_SCHEMA
表,它包含了innodb表的行数的粗略估计-请参阅mysql docs中关于information_schema.tables的notes部分。7d7tgy0s3#
它显示了为得到结果而运行的行数。
错误数据的原因是explain不准确,它根据存储在表中的信息对数据进行猜测。
这是非常有用的信息,例如,在许多表上执行联接时,您希望确保没有在整个联接表中为每一行运行一行信息。
这是一个608行表的测试。
结果:
下面是解释
结果: