#mariadb
#mariadb
Вопрос:
Рассмотрим этот запрос:
select d.*
from data d
where channel_id=83
order by channel_id,timestamp
Выполнение происходит немедленно, поскольку channel_id, временная метка индексируется:
CREATE TABLE `data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel_id` int(11) DEFAULT NULL,
`timestamp` bigint(20) NOT NULL,
`value` double NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `data_unique` (`channel_id`,`timestamp`),
KEY `IDX_ADF3F36372F5A1AA` (`channel_id`),
CONSTRAINT `FK_ADF3F36372F5A1AA` FOREIGN KEY (`channel_id`) REFERENCES `entities` (`id`)
)
Как только я добавляю простую функцию LAG (), запрос замедляется до обхода:
select d.*
,lag(value) over (order by channel_id,timestamp)
from data d
where channel_id=83
order by channel_id,timestamp
Объясните план:
------ ------------- ------- ------ ---------------------------------- ---------------------- --------- ------- -------- -----------------
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
------ ------------- ------- ------ ---------------------------------- ---------------------- --------- ------- -------- -----------------
| 1 | SIMPLE | d | ref | data_unique,IDX_ADF3F36372F5A1AA | IDX_ADF3F36372F5A1AA | 5 | const | 759654 | Using temporary |
------ ------------- ------- ------ ---------------------------------- ---------------------- --------- ------- -------- -----------------
Объясните план без инструкции LAG():
------ ------------- ------- ------ ---------------------------------- ---------------------- --------- ------- -------- -------
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
------ ------------- ------- ------ ---------------------------------- ---------------------- --------- ------- -------- -------
| 1 | SIMPLE | d | ref | data_unique,IDX_ADF3F36372F5A1AA | IDX_ADF3F36372F5A1AA | 5 | const | 759730 | |
------ ------------- ------- ------ ---------------------------------- ---------------------- --------- ------- -------- -------
Есть ли проблема с производительностью оконных функций в mariadb или я неправильно выполняю этот запрос?