这个问题有三个层次,取决于我的想法不正确或不可行的地方:
我想要创建表库存(id,日期,符号,.)哈希分区按id (自动递增),并创建663分区。或创建表库(日期、符号、.)散列分区按日期划分,663个分区。
我应该选择哪种选择?PS: 663个分区,因为存储数据为13年*每年51周
如果可能的话,
如果我指定要插入哪个分区,那么插入将更快。在分区表上直接尝试的插入语句,如插入到股票值(.)与未分区的股票表相比非常慢。
发布于 2021-01-05 08:25:33
不要使用哈希分区;它要么没有好处(在进行点查询时),要么效率极低(当执行范围查询时)。
如果date+symbol是UNIQUE,那么就摆脱id;这是不必要的负担。假设这一点,然后使用
PRIMARY KEY(symbol, date),
INDEX(date)辅助索引是可选的--仅当您需要按date搜索而不指定symbol时才包括它。
考虑将symbol规范化为symbol_id,其中它是SMALLINT UNSIGNED,因此符号只使用2个字节。
你为什么关心INSERT的速度?这是一次任务,不是吗?
你的数学听起来像是一个很小的表-- 13_51_2000 =130万行--也许是100到200 100。
PS。在这52周中,你要离开哪一周?
更新
如果您每天都要添加更多的行,那么负载就会小得多,需要不同的技术。特别是,你可能有一个文件与一天的收盘价,而不是2000文件?
如果数据实际超过100 13,并且您从13年的数据开始,我建议如下:
PARTITION BY RANGE(TO_DAYS(date))并从以下分区开始(甚至在加载之前):
F 221
每晚查看是否是时候添加一个新的月,在这种情况下,ALTER TABLE REPARTITION future进入下一个月和一个新的(空的)‘未来’。
更多细节:http://mysql.rjweb.org/doc.php/partitionmaint
这种奇怪的分区设置的原因是:每天晚上加载新数据时,它都会在当前的“月份”分区中达到2000个不同的位置;这很可能适合缓存,从而避免重击。
而初始负载的每个LOAD DATA都会在巨大的分区中的一个点加载大量数据,同样是高效的。
https://stackoverflow.com/questions/65575206
复制相似问题