当前位置:   article > 正文

mysql 复合分区_mysql时间字段复合分区

mysql时间字段复合分区

1.以下面的排序为例子,对大数据的表进行复合分区,提高查询效率

2.这需求,如果不分区,查询sql很简单,首先,测试表的表结构如下

sql :

 Select * from news_main order by news_click desc

 

3.为了避免大数据的性能问题,使用分区,并且这里使用list分区,按照news_class字段进行分区

  1. alter table news_main PARTITION by list(news_class)
  2. (
  3. PARTITION class_java values in(1),#1java
  4. PARTITION class_php values in(2),#2php
  5. PARTITION class_python values in(3)#3python
  6. )

这样,我们就能根据分类排序,sql :

select * from news_main partition(class_xxx) order by id desc 

class_xxx由分区的参数决定

4.如果用户选择了年份,我们使用子分区,在分类下,再按年份,进行一次分区

   a. range 和 list 都支持再次进行子分区切割,子分区支持hash和key。

   b.hash分区,根据某列的值,均衡的分配到各个分区。

   c.按年份分区 ,概念:数据均匀的分布到预定的各个分区中,保证各分区的数据数量大致一直

alter table news_main PARTITION by hash(year(news_adddate)) PARTITIONS 3

 

  1. #写法2
  2. alter table news_main PARTITION by hash(year(news_adddate)) PARTITIONS 3
  3. (
  4. PARTITION p0, #hash分区,这个可以略写,写了partition 3就可以了。
  5. PARTITION p1,
  6. PARTITION p2
  7. )

d.如何判定数据分布到哪一个分区?

 比如,我们分了3个区,只要计算 select mod(year,3),就可以知道,在px分区里,其中,year是参数;

 算出来之后,使用 select * from news_main partition(px); 

5.复合分区的写法

  1. alter table news_main PARTITION by list(news_class) SUBPARTITION by hash(year(news_adddate)) SUBPARTITIONS 3
  2. (
  3. PARTITION class_java values in(1) ,
  4. PARTITION class_php values in(2),
  5. PARTITION class_python values in(3)
  6. )

子分区的分区名是: 上级分区+s+p+mod(值,分区的数量),比如,取2014,news_class是1的sql,

  1. select * from news_main partition(classjavasp1);
  2. #1 select * mod(2014,3) = 1

 

这种方法,在mysql5.6.2才支持这么查询。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/623848
推荐阅读
相关标签
  

闽ICP备14008679号