首页 > 解决方案 > 为什么相同的 mysql sql 在 5.6 和 5.7 之间有两个关于 icp 的结果

问题描述

桌子

CREATE TABLE `employees` (
  `emp_no` int(11) NOT NULL,
  `birth_date` date NOT NULL,
  `first_name` varchar(14) NOT NULL,
  `last_name` varchar(16) NOT NULL,
  `gender` enum('M','F') NOT NULL,
  `hire_date` date NOT NULL,
  PRIMARY KEY (`emp_no`),
  KEY `fnln` (`first_name`,`last_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

sql

explain select * from employees where first_name='Anneke' and last_name='Porenta';

5.6 结果 5.6 结果

5.7 结果 5.7 结果

标签: mysqlinnodb

解决方案


首先,不仅可以预期,更新版本的数据库产品可能会为查询计划创建不同的输出,这也是您想要的:您希望出现改进。

现在:查询计划的要点是 100% 相同:5.6 中存在的所有列在 5.7 中显示相同 - 因此查询计划本身没有改变。

改变的是,较新的版本显示了另外两列 - 因为对不同分区的并行查询的支持在 5.7 中是新的,所以partitions column很容易解释。

filtered专栏源于查询计划器中的优化:显然,条件的选择性对于查询计划非常重要,并且显然在查询运行之前不知道确切的选择性,但是较新的查询计划器会通知您,它会猜测它使用的情况。这是一件好事。


推荐阅读