gpt4 book ai didi

mysql - 按列分组的限制

转载 作者:行者123 更新时间:2023-11-29 11:11:32 25 4
gpt4 key购买 nike

我在 MySQL 中有以下表和查询:

CREATE TABLE IF NOT EXISTS `events` (
`pv_name` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL,
`time_stamp` bigint(20) unsigned NOT NULL,
`event_type` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL,
`data` json,
PRIMARY KEY (`pv_name`,`time_stamp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPRESSED;

CREATE TEMPORARY TABLE matching_pv_names (
pv_name varchar(60) NOT NULL,
PRIMARY KEY (pv_name)
) ENGINE=Memory;

SELECT events.pv_name, MAX(events.time_stamp) AS time_stamp
FROM events
WHERE events.time_stamp <= @time_stamp_in
GROUP BY events.pv_name;

目前的查询可以通过“使用索引进行分组”有效运行。是否可以修改它以将其分组的 pv_names 集限制为 matching_pv_names 表中的 pv_names 集,并仍然保留“使用索引进行分组依据”优化?例如,以下查询不再使用此优化:

SELECT events.pv_name, MAX(events.time_stamp) AS time_stamp
FROM events
WHERE events.time_stamp <= @time_stamp_in
AND events.pv_name IN (SELECT matching_pv_names.pv_name FROM matching_pv_names)
GROUP BY events.pv_name;

还有另一种写法吗?

最佳答案

您的第一个 SQL 可以从 GROUP BY 优化中受益,因为它仅使用一个表,并且您用于 GROUP BY 的列具有索引和唯一的聚合函数您使用的是MAX()。并且您在 WHERE 子句中使用常量。

在查询中添加另一个表后,GROUP BY optimization无法应用。

关于mysql - 按列分组的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com