Почему один и тот же mysql sql с двумя результатами около icp между 5.6 и 5.7 - PullRequest
0 голосов
/ 08 апреля 2020

Таблица

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 результат

1 Ответ

1 голос
/ 08 апреля 2020

Прежде всего, не только следует ожидать, что более новая версия продукта базы данных может создавать различные выходные данные для плана запроса, это также то, что вы хотите: вы хотите, чтобы улучшения отображались.

Теперь: суть плана запроса на 100% идентична: все столбцы, которые существовали в 5.6, одинаково отображаются в 5.7, поэтому сам план запроса не изменился.

Что изменилось, так это то, что более новая версия отображает еще два столбца - поскольку поддержка запросов параллельных вычислений для различных разделов является новой в 5.7, partitions column легко объяснимо.

Столбец filtered вытекает из оптимизаций в планировщике запросов: очевидно, избирательность условие очень важно для плана запроса, и, очевидно, точная избирательность не известна до выполнения запроса, но планировщик новых запросов информирует вас о том, какие оценки он использует. Это хорошая вещь.

...