【发布时间】:2015-03-12 10:30:41
【问题描述】:
我有一个存储在单个 SSD 上的数据库。我认为这足以告诉我不需要分区,但我仍然想完全验证这一点。
我的大表(我们称之为times)有一个代表一天中某个时间的列,存储为一个哑整数。例如'12:07:31' 存储为120731。
从这个表到另一个表有一个外键(我们称之为trips);这链接到最后一个(称为calendar),其中包含日期信息。
目前我有一个每天晚上运行的脚本,并且:
- 过滤
calendar表以仅检索今天的行 - 从中,选择
times中仅今天匹配的所有信息 - 由此,每小时创建一个表+3
“每小时+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 到
现在我有一种感觉,我可以从分区中受益,但是如何分区:
- 超过日期:它不是表中的列,而是外部表中的列。是否可以在分区规则中使用
JOINs? - 随着时间的推移:我知道我可以使用 RANGE 进行分区,但这不会让我重叠分区:0-3、1-4、2-5...
有可能吗?值得吗?
您将需要 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
结果是可变的,但我观察到前两种方法的时间相似(大约 500 毫秒),而最后一种方法的时间快了 4 倍(大约 125 毫秒)
【问题讨论】:
标签: mysql database-partitioning