首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL插入分区'p‘

问MySQL插入分区'p‘
EN

Stack Overflow用户
提问于 2021-01-05 08:14:14
回答 1查看 688关注 0票数 0

这个问题有三个层次,取决于我的想法不正确或不可行的地方:

  1. I有CSV文件的代码: A.csv,AAPL.csv.等2000个股票,包括日期,符号,打开,HI,低,关闭,成交量

我想要创建表库存(id,日期,符号,.)哈希分区按id (自动递增),并创建663分区。或创建表库(日期、符号、.)散列分区按日期划分,663个分区。

我应该选择哪种选择?PS: 663个分区,因为存储数据为13年*每年51周

  1. 有选择要插入行的特定哈希分区的方法吗?与表“股票”一样,在'id‘列(664个分区)上分区的散列可以执行如下操作:插入分区p52值(.)

如果可能的话,

  1. 可以对A.csv文件中的数据进行同样的加载,这样就可以了。第1-2000行转到分区p0。行2001-4000转到分区p1.。等等。

如果我指定要插入哪个分区,那么插入将更快。在分区表上直接尝试的插入语句,如插入到股票值(.)与未分区的股票表相比非常慢。

EN

回答 1

Stack Overflow用户

发布于 2021-01-05 08:25:33

不要使用哈希分区;它要么没有好处(在进行点查询时),要么效率极低(当执行范围查询时)。

如果date+symbol是UNIQUE,那么就摆脱id;这是不必要的负担。假设这一点,然后使用

代码语言:javascript
复制
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年的数据开始,我建议如下:

代码语言:javascript
复制
PARTITION BY RANGE(TO_DAYS(date))

并从以下分区开始(甚至在加载之前):

  • --一个空分区(小于最老日期)--
  • --一个包含数据集最后一个月前所有数据的巨大分区。
  • 一个月分区(继续初始加载结束,加上本月剩余时间)
  • --一个空的“未来”分区。

F 221

每晚查看是否是时候添加一个新的月,在这种情况下,ALTER TABLE REPARTITION future进入下一个月和一个新的(空的)‘未来’。

更多细节:http://mysql.rjweb.org/doc.php/partitionmaint

这种奇怪的分区设置的原因是:每天晚上加载新数据时,它都会在当前的“月份”分区中达到2000个不同的位置;这很可能适合缓存,从而避免重击。

而初始负载的每个LOAD DATA都会在巨大的分区中的一个点加载大量数据,同样是高效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65575206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档