gpt4 book ai didi

MySQL:从 6 个巨大的相同表中优化 SELECT,这些表具有按时间戳拆分的不同数据

转载 作者:行者123 更新时间:2023-11-29 03:14:05 26 4
gpt4 key购买 nike

请问我这里有同样的问题

MySQL - Selecting data from multiple tables all with same structure but different data ,

我必须从许多结构相同但数据不同的 MySQL 表中选择数据(拆分为 table_0、table_1、table_2 等到 table_5,以分布数百万条数据记录)。

为每个设备生成数据记录的硬件根据不唯一的时间戳字段从一个表移动到另一个表。例如table_0 中的 50 条记录可能具有相同的时间戳。当数据到达 table_5 的末尾时,它会回到 table_0 开始覆盖那里的数据。我需要在一个时间范围内获取每个设备上的数据。

每个表的数据列(table_0, table_1... 一直到table_5):
timestamp, robotGroupID, robotID, sensor1, sensor2, sensor3, ... (many of them)

然而,这些表很大,而且 UNION ALL(我读起来比 DISTINCT 更快)需要永远执行,即使只有两个表,更不用说 6 个了。我将在下面的两个表格中进行说明。

PHP 中的 MySQL 语句:(仅针对传感器 1、传感器 2 和传感器 3 进行说明)
(SELECT sensor1, sensor2, sensor3 FROM table_0 WHERE robotID=".$robotID." AND timestamp BETWEEN ".$timeStampStart." AND ".$timeStampStop)<br/>
UNION ALL<br/>
(SELECT sensor1, sensor2, sensor3 FROM table_1 WHERE robotID=".$robotID." AND timestamp BETWEEN ".$timeStampStart." AND ".$timeStampStop)

注意,除了表名之外,这是完全相同的查询。一个时间范围内机器人的传感器数据可能一次跨越一个、一个或多个表格。

我不能使用 LIMIT,因为无法提前知道每个时间范围内来自机器人的报告数量。我不能使用 MERGE STORAGE ENGINE,因为我对公司的数据库只有只读访问权限。

我有一个想法,在运行查询之前在每个表上使用 count(robotID) 等来检查,但我不确定如何去做,因为我是个新手。

请问您认为我如何才能使 6 个表和更多列的工作速度更快,因为列数比图示的要多得多?提前致谢!

最佳答案

是否对 RobotID 和 Timestamp 字段进行了索引?

我至少会添加一个多字段索引 (RobotId, timestamp)。

你说你对表只有只读权限,那么你可以请求添加这个索引吗?我相信它会对您发布的原始查询和更新后的查询有所帮助。

关于MySQL:从 6 个巨大的相同表中优化 SELECT,这些表具有按时间戳拆分的不同数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3634389/

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