MySQL 5.5多列分区详解与实例解析

您当前的位置:   首页 > 首页 > 解决方案
MySQL 5.5多列分区详解与实例解析
发布时间:2026-02-10 05:10:32

MySQL 5.5数据库的多列分区是该篇文章我们主要要介绍的内容,该篇文章我们通过一个实例来介绍这一部分内容,接下来就让我们一起来看看吧!

多列分区

COLUMNS关键字现在允许字符串和日期列作为分区定义列,同时还允许使用多个列定义一个分区,你可能在官方文档中已经看到了一些例子,如: 

CREATE TABLE p1 (      a INT,      b INT,      c INT   )    PARTITION BY RANGE COLUMNS (a,b)    (      PARTITION p01 VALUES LESS THAN (10,20),      PARTITION p02 VALUES LESS THAN (20,30),      PARTITION p03 VALUES LESS THAN (30,40),      PARTITION p04 VALUES LESS THAN (40,MAXVALUE),      PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)    );     CREATE TABLE p2 (      a INT,      b INT,      c INT   )    PARTITION BY RANGE COLUMNS (a,b)    (      PARTITION p01 VALUES LESS THAN (10,10),      PARTITION p02 VALUES LESS THAN (10,20),      PARTITION p03 VALUES LESS THAN (10,30),      PARTITION p04 VALUES LESS THAN (10,MAXVALUE),      PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)    )  

同样还有PARTITION BY RANGE COLUMNS (a,b,c)等其它例子。由于我很长时间都在使用MySQL 5.1的分区,我对多列分区的含义不太了解,LESS THAN (10,10)是什么意思?如果下一个分区是LESS THAN (10,20)会发生什么?相反,如果是(20,30)又会如何?

所有这些问题都需要一个答案,在回答之前,他们需要更好地理解我们在做什么。

开始时可能有些混乱,当所有分区有一个不同范围的值时,实际上,它只是在表的一个列上进行了分区,但事实并非如此,在下面的例子中

CREATE TABLE p1_single (      a INT,      b INT,      c INT   )    PARTITION BY RANGE COLUMNS (a)    (      PARTITION p01 VALUES LESS THAN (10),      PARTITION p02 VALUES LESS THAN (20),      PARTITION p03 VALUES LESS THAN (30),      PARTITION p04 VALUES LESS THAN (40),      PARTITION p05 VALUES LESS THAN (MAXVALUE)    );  

它和前面的表p1不一样,如果你在表p1中插入(10,1,1),它将会进入第一个分区,相反,在表p1_single中,它将会进入第二个分区,其原因是(10,1)小于(10,10),如果你仅仅关注第一个值,你还没有意识到你在比较一个元组,而不是一个单一的值。

现在我们来分析一下最难懂的地方,当你需要确定某一行应该放在哪里时会发生什么?你是如何确定类似(10,9) < (10,10)这种运算的值的?答案其实很简单,当你对它们进行排序时,使用相同的方法计算两条记录的值。

a=10    b=9    (a,b) < (10,10)      # evaluates to:    (a < 10)    OR   ((a = 10) AND ( b < 10))    # which translates to:    (10 < 10)    OR   ((1010 = 10) AND ( 9 < 10))  

如果有三列,表达式会更长,但不会更复杂。你首先在第一个项目上测试小于运算,如果有两个或更多的分区与之匹配,接着就测试第二个项目,如果不止一个候选分区,那还需要测试第三个项目。

关于MySQL 5.5多列分区的知识就介绍到这里了,希望本次的介绍能够对您有所帮助。

原文出处:http://lujia35.iteye.com/blog/718899。