MySQL多分区
一个按月份分区的方案
表结构
具体分区(使用dt做分区关键字)
分区拓展
-
当没有max分区的时候, 如果写入的dt超过分区最大值(最后一个less then后面的)的时候会报错, 写不进去, 这时候需要手动add
-
当有max分区的时候, 需要对max分区进行分裂(我们采用的方式)
如何查询分区的数据, 或数据属于那个分区
-
explain
-
select
分区数量受限问题
当使用myisam表的时候, open_files_limit 最多打开文件默认值是1024个,
当分区表数量达到1024个时, 每当第一次访问一个分区表的时候,MySQL需要把所有的分区都访问一遍,
就超出限制报错 can't open file
因为这种策略是mysql一开始在server层实现的, 比较粗糙,innodb没有这个问题;
常用操作
在 MySQL 中,可以使用以下方法查询某个数据具体属于哪个分区:
-
使用
EXPLAIN PARTITIONS
语句查询。该语句可以返回表中所有分区的分区键范围和分区名称。例如:
-
使用 SHOW CREATE TABLE 语句查询。
该语句可以返回表的创建语句,其中包含了分区的信息。例如:
需要注意的是,以上方法可以查询某个数据所属的分区,但是在实际应用中,尽量避免频繁查询数据所属的分区,因为这可能会影响系统的性能和可用性。
如果需要对某个分区中的数据进行操作,可以直接指定分区名称进行操作,例如:
在上述示例中,使用 PARTITION 子句指定要查询的分区名称,可以直接查询该分区中的数据。类似地,也可以使用 PARTITION 子句进行删除、更新等操作。
需要注意的是,对于分区表的操作,需要根据实际情况进行优化和调整,以提高系统的性能和可用性。同时,也需要注意对分区的管理和维护,对于过期或者不再使用的分区,应该及时进行删除或归档,以避免数据堆积和影响系统性能。
参考:
- <<MySQL实战45讲>>: 43 要不要使用分区表?