ZA.*_*ZA. 10 mysql count 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 |
+----+-------------+---------+-
Run Code Online (Sandbox Code Playgroud)
我认为"解析select*from table where relation_title ='xxxxxxxxx';" 通过索引返回relation_title ='xxxxxxxxx'的行.但它比真正的数字要小.
Óla*_*age 13
它显示了为了获得结果而经过的行数.
错误数据的原因是EXPLAIN不准确,它根据存储在您表中的信息猜测您的数据.
这是非常有用的信息,例如在许多表上执行JOINS并且您希望确保没有在整个连接表中运行每行所拥有的一行信息.
这是对608行表的测试.
SELECT COUNT(id) FROM table WHERE user_id = 1
Run Code Online (Sandbox Code Playgroud)
结果:
COUNT(id)
512
Run Code Online (Sandbox Code Playgroud)
这是解释
EXPLAIN SELECT COUNT(id) FROM table WHERE user_id = 1
Run Code Online (Sandbox Code Playgroud)
结果:
id rows
1 608
Run Code Online (Sandbox Code Playgroud)
该EXPLAIN
查询将使用INFORMATION_SCHEMA
表中提供的值,其中包含innodb表的行计数的粗略估计 - 请参阅INFORMATION_SCHEMA.TABLES上的mysql文档中的注释部分.
执行ANALYZE TABLE table_name;
- 它将更新 EXPLAIN 使用的统计信息,您将获得正确的数字。例如:当表中根本没有数据时,EXPLAIN 会建议该表为空并优化查询以首先基于该表进行过滤(因为它不从磁盘、内存等读取任何内容)。然后当你不执行数据加载时ANALYZE TABLE table_name;
,优化器仍然建议表仍然是空的,并且不使用最佳执行计划进行查询。EXPLAIN 的行为方式相同 - 它不查找表中当前的行数,而是查找由ANALYZE TABLE table name
(在某些情况下自动执行的 - 例如表中行数的 1/16 已更改)生成的统计信息。
归档时间: |
|
查看次数: |
8980 次 |
最近记录: |