请我遇到和我在这里发现的一样的问题
MySQL - 从具有相同结构但数据不同的多个表中选择数据,
我必须从许多具有相同结构但数据不同的 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)
UNION ALL
(SELECT sensor1, sensor2, sensor3 FROM table_1 WHERE robotID=".$robotID." AND timestamp BETWEEN ".$timeStampStart." AND ".$timeStampStop)
注意,除了表名之外,它是完全相同的查询。机器人在一个时间范围内的传感器数据可能一次跨越一个表、一个表或多个表。
我不能使用 LIMIT,因为无法提前知道每个时间范围内机器人的报告数量。我不能使用 MERGE STORAGE ENGINE 因为我只有对公司数据库的只读访问权限。
我有一个想法,在运行查询之前在每个表上使用 count(robotID) 等进行检查,但我不知道该怎么做,因为我是个新手。
请您认为我如何使 6 个表和更多列的工作更快,因为列数比图示的多得多?提前致谢!