我有一个存储在单个SSD上的数据库。我认为这足以告诉我我不需要分区,但仍然,我想完全验证这一点。
我的大表(我们称之为times
)有一个代表一天中某个时间的列,存储为一个哑整数。例如,'12:07:31'
存储为120731
。
这个表中有一个外键到另一个(我们称之为trips
);这与最后一个(称为calendar
)相关联,后者包含日期信息。
目前我有一个每晚运行的脚本:
calendar
表以仅检索今天的行times
仅与今天匹配的所有信息按'每小时+3',我的意思是我有这些表:
times_00
=>从早上12点到凌晨3点times_01
=>从凌晨1点到凌晨4点times_02
=>从凌晨2点到凌晨5点times_19
=>从晚上7点到晚上10点因此,当我想查询times
时,我只是在上午10点到11点之间查询times_10
;或times_17
下午5点至下午6点等。
这要快得多,因为我从10M变为<200k行。
现在我觉得我可以从分区中受益,但是如何分区:
JOIN
?有可能吗?值得吗?
您需要find here all the data来重现我的设置。
以下是./test.sh
的输出:
stop_times:
real 0m0.487s
user 0m0.004s
sys 0m0.000s
stop_times_part:
real 0m0.707s
user 0m0.000s
sys 0m0.004s
stop_times_14:
real 0m0.127s
user 0m0.004s
sys 0m0.000s
结果是可变的,但我观察到前两种方法的时间相似(大约500ms),最后一种方法的时间快了4倍(大约125ms)
答案 0 :(得分:1)
据我了解,您希望将“时间”表行分区为不同的表。这样您的查询就会变得很快。但我不明白你为什么要创建'每小时+3'表而不是'每小时'表。如果你生成每个小时表,那么我认为你没有重叠的问题,每一行时间表将是'每小时'表的外键。
例如
every_hour_12_03_2015_01 => for 12AM to 1 AM
every_hour_12_03_2015_02 => for 1AM to 2 AM
every_hour_12_03_2015_03 => for 2AM to 3 AM
:
:
every_hour_12_03_2015_24 => for 11PM to 12 AM