Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина? / 6 сообщений из 6, страница 1 из 1
06.11.2020, 09:22
    #40015849
xbz
xbz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?
один и тот же запрос во 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
и все работает.
Что я делаю не так?
...
Рейтинг: 0 / 0
06.11.2020, 10:02
    #40015857
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?
Да один и тот же план!

Если сравниваешь вьюв с запросом, то запрос надо оборачивать в SELECT * FROM (текст запроса).
...
Рейтинг: 0 / 0
06.11.2020, 12:14
    #40015896
xbz
xbz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?
Огромное спасибо за ответ, очень помогли.
<derived2> - это создание временной таблицы?
дело в том, что сам запрос выполняется, но если его обернуть в подзапрос то все плохо.
верно ли я понимаю, что причина в том, что создается временная таблица, и причина в неверном конфиге mysql?
...
Рейтинг: 0 / 0
06.11.2020, 15:15
    #40015978
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?
xbz
верно ли я понимаю, что причина в том, что создается временная таблица

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

Весьма вряд ли. Куда ещё может MySQL деть полтора миллиона записей, как не на диск?
...
Рейтинг: 0 / 0
09.11.2020, 04:16
    #40016403
xbz
xbz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?
вопрос в том, как узнать где лежат временные таблицы: в оперативке или на винте.
...
Рейтинг: 0 / 0
09.11.2020, 08:08
    #40016413
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина?
Да в общем никак. Разве что, выполняя запрос без "соседей", смотреть, не появляются ли на диске временные файлы. Вот только нужность этих знаний, с моей точки зрения, нулевая.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / один и тот же запрос во View и напрямки имеет разный план запроса. В чем причина? / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]