- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对分区主题还很陌生,并且由于数据的大量积累而出现了必要性。
嗯,基本上它是一个访问控制系统,目前有20个部门,每个部门大约有100个用户。系统记录了进入和退出的日期和时间(from_date/to_date)我的意图是按部门划分,然后全年一个月。
计划:
按 [ dep_id 和 date (from_date 和 to_date)]
问题
我有下表。
CREATE TABLE `employee` (
`employee_id` smallint(5) NOT NULL,
`dep_id` int(11) NOT NULL,
`from_date` int(11) NOT NULL,
`to_date` int(11) NOT NULL,
KEY `index1` (`employee_id`,`from_date`,`to_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我有 UNIX_TIMESTAMP 格式 (INT 11) 的日期(from_date 和 to_date)我希望将其划分为一年中的所有月份。这可能吗?
Mysql - 5.7
最佳答案
可以在整数列上使用范围分区。
假设my_int_col
是自1970-01-01
以来的unix风格整数秒
我们可以通过如下方式实现每月分区:
PARTITION BY RANGE (my_int_col)
( PARTITION p20180101 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-01-01 00:00') )
, PARTITION p20180201 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-02-01 00:00') )
, PARTITION p20180301 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-03-01 00:00') )
, PARTITION p20180401 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-04-01 00:00') )
, PARTITION p20180501 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-05-01 00:00') )
, PARTITION p20180601 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-06-01 00:00') )
注意 session 的 time_zone 设置。这些日期文字将被解释为当前 time_zone 中的值...例如如果您希望它们是 UTC 日期时间,time_zone 应为 +00:00。
或者,将 UNIX_TIMESTAMP() 表达式替换为文字整数值...这就是 MySQL 将要对 UNIX_TIMESTAMP() 表达式执行的操作。
显然,您可以随意命名分区。
<小时/>注意:对现有表应用分区将要求 MySQL 创建该表的整个副本,并在操作完成时在原始表上持有独占锁。因此,您将需要足够的存储(磁盘)空间和完成操作的时间窗口。
可以创建一个已分区的新表,然后一次复制一个 block 的旧数据。但要使 block 的大小合理,以避免因大型事务而使 ibdata1 膨胀。然后执行一些 RENAME TABLE 语句将旧表移出,然后将新表移入。
关于分区表需要注意的一些注意事项:没有外键支持,并且不能保证分区表会比非分区表提供更好的 DML 性能。
战略索引和精心计划的查询是“非常大”表性能的关键。对于分区表也是如此。
分区并不是一些新手所希望的解决性能问题的 Elixir 。
就在分区内创建子分区而言,我不建议这样做。
关于mysql - UNIX_TIMESTAMP 字段分区一整年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595590/
我是一名优秀的程序员,十分优秀!