暂无图片
explain中的几个疑问?
我来答
分享
暂无图片 匿名用户
explain中的几个疑问?

mysql> ANALYZE TABLE t1;
+---------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+---------+----------+----------+
| test.t1 | analyze | status | OK |
+---------+---------+----------+----------+
1 row in set (0.08 sec)

mysql> select count(*) from t1 where f2>40;
+----------+
| count(*) |
+----------+
| 80 |
+----------+
1 row in set (0.00 sec)

mysql> EXPLAIN SELECT f1, f2 FROM t1 WHERE f2 > 40;
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+----------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+----------------------------------------+
| 1 | SIMPLE | t1 | NULL | range | PRIMARY | PRIMARY | 8 | NULL | 53 | 100.00 | Using where; Using index for skip scan 


统计信息已经是最新的了,明明是80,explain中的rows =53,怎么理解?

2:filtered =100,怎么理解?

3:mysql中的explain应该是假跑的,怎么获取真实的跑sql的执行计划呢??

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
大大刺猬
  1. analyze收集的统计信息, 只是个估计值, 不是真实值. 收集统计信息一般是采样, 采样越多越准确, 但是越慢(oracle里面为estimate_percent), mysql里面为innodb_stats_persistent_sample_pages(默认20,单位PAGE)
  2. 对于explain中各字段是啥意思, 建议看官网https://dev.mysql.com/doc/refman/5.7/en/explain-output.html
  3. 觉得explain不准的话, 可以使用PROFILE. 还是看官网. 注意profile是看实际执行的结果, 如果要看delete/update的话, 建议开启事务. 不然数据就真滴变了: https://dev.mysql.com/doc/refman/5.7/en/show-profile.html
  4. 没事多看看官网…
暂无图片 评论
暂无图片 有用 0
打赏 0
chengang

我补充两点
1、关于filtered的理解可以看这一篇大佬写的文章
https://www.jianshu.com/p/e70de1f7cdcf
2、explain for CONNECTION 可以看正在执行的执行计划

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
MySQL Ver 8.0.27 对centos版本有什么要求吗?
回答 2
已采纳
centos6,7,8都可以
关于delete-master-logs
回答 1
deletemasterlogs是备份完后,就删除binlog(执行的命令参考PURGEBINARYLOGSTO'mysqlbin.000276'),不会做binlog的备份(它也不知道往哪备啊)
MySQL的二进制日志(binlog)有什么重要用途?
回答 1
已采纳
二进制日志(binlog)记录着数据库的变更,还记录着每个变更花费时间的信息,记录的单位是事件(enent),不是事务(transaction),一个事务可以包含多个事件。从MySQL8.0开始,二进
重装了win10系统,安装了MYSQL8.0版本,新建环境变量报错1045(28000):Access denied for user'root@localhost
回答 2
已采纳
由于从MySQL8开始,身份验证插件发生了改变,默认的“cachingsha2password”不允许远程登录,故需将此插件修改为“mysqlnativepassword”便可登录。方法:vim/da
mysql碰到安全组扫描出来的漏洞之类的,如何处理?
回答 2
这个方案已经很详细了
MySQL一个业务字段只有2种值,需要用字典表吗?
回答 2
已采纳
comment加一个说明就可以了吧。字典表其实也是一个说明备注
oltp和olap不同应用下,有哪些时候会是单线程操作哪些时候会是多线程并发的啊?
回答 1
采用单线程和多线程并发要个根据数据库特性和业务关联都选择。从mysql角度出发:mysql是索引组织表,对于同一个业务流程应该是单线程,对于批量分析型任务应该是并行操作。mysql是默认innodb引
mysql怎么像sqlserver那样使用print效果?
回答 1
在MySQL中,可以使用SELECT语句来输出打印内容。例如,以下代码可以输出“HelloWorld”:SELECT&x27;HelloWorld&x27;;
127.0.0.1无法登陆的问题?
回答 2
mysql是通过user和host共同决定账号的.也就是说root@127.0.0.1和root@localhost是两个不同的用户如果要使用root@127.0.0.1登录的话,可以执行如下sql建
rc下神奇的锁等待 mysql 8.0
回答 1
原因很简单。typeid是没有索引的那么mysql会对扫描的行加锁。RC与RR的区别是RC会释放不符合条件的行。