Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?  [new]
xbz
Member

Откуда:
Сообщений: 199
один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?
суть есть таблица:
автор
CREATE TABLE `sensor_parameter_value` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'заменен bigint20',
`sensor_parameter_id` int NOT NULL,
`date_time` datetime(6) NOT NULL COMMENT 'колонка с микрокодомDATETIME(6)DATETIME(6)',
`value` varchar(50) NOT NULL,
`status_id` int NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_sensor_parameter_value_sensor_parameter1_idx` (`sensor_parameter_id`),
KEY `fk_sensor_parameter_value_status1_idx` (`status_id`),
KEY `fk_sensor_parameter_value_key2_idx` (`sensor_parameter_id`,`date_time`) USING BTREE,
KEY `fk_sensor_parameter_value_date_time_idx` (`date_time`),
KEY `fk_sensor_parameter_value_value_idx` (`value`) USING BTREE,
CONSTRAINT `fk_sensor_parameter_value_status1` FOREIGN KEY (`status_id`) REFERENCES `status` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=7199109938 DEFAULT CHARSET=utf8 COMMENT='Значения параметров датчиков';

делаю к ней представление:
автор
CREATE
ALGORITHM = UNDEFINED
DEFINER = `amicum_system`@`%`
SQL SECURITY DEFINER
VIEW `view_sensor_parameter_value_maxDate` AS
SELECT
`sensor_parameter_value`.`sensor_parameter_id` AS `sensor_parameter_id`,
MAX(`sensor_parameter_value`.`date_time`) AS `date_time_last`
FROM
`sensor_parameter_value`
GROUP BY `sensor_parameter_value`.`sensor_parameter_id`

оно дает такой план запроса:
автор
1 PRIMARY <derived2> ALL 1572527 100.00
2 DERIVED sensor_parameter_value range fk_sensor_parameter_value_sensor_parameter1_idx,fk_sensor_parameter_value_key2_idx fk_sensor_parameter_value_key2_idx 4 1572527 100.00 Using index for group-by

и данные не приезжают.
а если я просто выполню запрос:
автор
EXPLAIN SELECT
`sensor_parameter_value`.`sensor_parameter_id` AS `sensor_parameter_id`,
MAX(`sensor_parameter_value`.`date_time`) AS `date_time_last`
FROM
`sensor_parameter_value`
GROUP BY `sensor_parameter_value`.`sensor_parameter_id`

то план запроса такой:
автор
1 SIMPLE sensor_parameter_value range fk_sensor_parameter_value_sensor_parameter1_idx,fk_sensor_parameter_value_key2_idx fk_sensor_parameter_value_key2_idx 4 1572527 100.00 Using index for group-by

и все работает.
Что я делаю не так?

К сообщению приложен файл. Размер - 85Kb
6 ноя 20, 09:22    [22227352]     Ответить | Цитировать Сообщить модератору
 Re: один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Да один и тот же план!

Если сравниваешь вьюв с запросом, то запрос надо оборачивать в SELECT * FROM (текст запроса).
6 ноя 20, 10:02    [22227363]     Ответить | Цитировать Сообщить модератору
 Re: один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?  [new]
xbz
Member

Откуда:
Сообщений: 199
Огромное спасибо за ответ, очень помогли.
<derived2> - это создание временной таблицы?
дело в том, что сам запрос выполняется, но если его обернуть в подзапрос то все плохо.
верно ли я понимаю, что причина в том, что создается временная таблица, и причина в неверном конфиге mysql?
6 ноя 20, 12:14    [22227435]     Ответить | Цитировать Сообщить модератору
 Re: один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
xbz
верно ли я понимаю, что причина в том, что создается временная таблица

Да. Или, если формулировать строго, то "представление материализуется". Большое оно...
xbz
причина в неверном конфиге mysql?

Весьма вряд ли. Куда ещё может MySQL деть полтора миллиона записей, как не на диск?
6 ноя 20, 15:15    [22227562]     Ответить | Цитировать Сообщить модератору
 Re: один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?  [new]
xbz
Member

Откуда:
Сообщений: 199
вопрос в том, как узнать где лежат временные таблицы: в оперативке или на винте.
9 ноя 20, 04:16    [22228522]     Ответить | Цитировать Сообщить модератору
 Re: один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Да в общем никак. Разве что, выполняя запрос без "соседей", смотреть, не появляются ли на диске временные файлы. Вот только нужность этих знаний, с моей точки зрения, нулевая.
9 ноя 20, 08:08    [22228532]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить