作者averywu (看文不要只会用横的看)
看板Database
标题[SQL ] 依日期切 partition
时间Wed Jan 6 17:35:35 2021
资料库名称:MySQL
资料库版本:5.6
内容/问题描述:
一直以来都是用日期去切表,因为资料大约每天成长六百万笔。
资料会大量写入,每五分钟写一次,一天写288次,每次约二万笔左右。
之後就是不定期查询,不会有更新的事发生。
用日期来切表我是用 data_yyyymmdd 去当表名,这样做有个大问题就是
当用户要查询的日期区间很大时,组SQL会组的很长很长(UNION ALL)。
想到也许可以用 partition 来切,但就我所知 partition 要先定义好切成几
个,然後条件是什麽。
因为我的资料是每天都有,主要也是依日期去查资料,但是我不可能每天都去
改 partition 的设定。用其它的 key 来切的话,因为不管怎麽切,每个分区
的表资料量也不可能少到哪里去,主要的 key 除了日期还有就是设备的 id
但设备的 id 也才三百来个,用设备id切每天每个 partition 成长数是二万,
大约一年就破百万笔了。
我的表资料结构如下:
deviceId : 1~ 30 而且有可能新增,是 index
deviceMachine : 不可做 key,资料没有一致性。
deviceIp : 不可做 key ,是 char(15) 记录IP用。
logTime : datetime 是 index
crc : 不可做 key , 是 char (50) 资料是 csv 资料且没有一致性
devicePwr : 不可做 key , 是 char (50) 资料是 csv 且没有一致性
deviceSNR : 不可做 key ,是 char (50) 资料是 csv 且没有一致性
在这种情况下有什麽方法依日期去切表呢?
或是用什麽方法切比较适合呢?
头好大QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 106.105.105.227 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1609925737.A.262.html
1F:推 billy522: 依照日期(logTime)BY天去切,logTime要加在PK中 01/06 19:52
2F:→ billy522: 第一次切表先定义好,之後写SP每日执行切表排程 01/06 19:53