数据库表分区的优势
在特定场景下,查询性能极大提高,尤其是当大部分经常访问的数据记录在一个或少数几个分区表上时。
表分区减小了索引的大小,并使得常访问的分区表的索引更容易保存于内存中。
当查询或者更新访问一个或少数几个分区表中的大部分数据时,可以通过顺序扫描该分区表而非使用大表索引来提高性能。
可通过添加或移除分区表来高效的批量增删数据。如可使用ALTER TABLE NO INHERIT可将特定分区从主逻辑表中
移除(该表依然存在,并可单独使用,只是与主表不再有继承关系并无法再通过主表访问该分区表),
或使用DROP TABLE直接将该分区表删除。这两种方式完全避免了使用DELETE时所需的VACUUM额外代价。
很少使用的数据可被迁移到便宜些的慢些的存储介质中
一般建议当单表大小超过内存就可以考虑表分区了
列表分区、范围分区、哈希分区
范围分区就是根据数据库表中某一字段的值的范围来划分分区。
列表分区明确指定了根据某字段的某个具体值进行分区,而不是像范围分区那样根据字段的值范围来划分的。
Hash分区表的分区定义包含两个属性,如下:
modulus: 指Hash分区个数。
remainder: 指Hash分区键取模余。
如果所设置的字段哈希值是一样的,则在同一个分区表
数据库分表功能
# 分表相应参数
_partition_table = True # 是否分表
_partition_type = 'list' # 分表类型 :list 列表分区,range 范围分区 ,hash 哈希分区
_partition_field = 'name' # 分表字段,字段定义必须为必填
分区信息配置
当升级模块之后 自动建一个分区信息
在这里可以配置分区内容如:
1、按照某种分类列表分区
2、按照年龄区间分区
3、按照字段内容hash
配置完成之后 ,点击初始化分区即可形成分区子表
列表分区和范围分区都有一个默认子表,hash分区不支持
以上操作完成之后,数据自动就会根据规则填充到对应子表