programing

MariaDB에서 윈도우 기능이 느립니까?

luckcodes 2023. 1. 21. 10:23

MariaDB에서 윈도우 기능이 느립니까?

다음 쿼리를 고려합니다.

select d.*
from data d
where channel_id=83
order by channel_id,timestamp

실행은 channel_id, timestamp가 색인화되면 즉시 실행됩니다.

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의 윈도우 기능에 성능 문제가 있나요?아니면 제가 이 쿼리를 잘못하고 있나요?

언급URL : https://stackoverflow.com/questions/55326017/are-window-functions-slow-in-mariadb