MySQL 5.5 分区之多列分区详解

数据库 MySQL
本文我们主要介绍了MySQL 5.5分区之多列分区的知识,并给出了多列分区的实例,希望本次的介绍能够对您有所帮助。

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

多列分区

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

  1. CREATE TABLE p1 (    
  2.   a INT,    
  3.   b INT,    
  4.   c INT   
  5. )    
  6. PARTITION BY RANGE COLUMNS (a,b)    
  7. (    
  8.   PARTITION p01 VALUES LESS THAN (10,20),    
  9.   PARTITION p02 VALUES LESS THAN (20,30),    
  10.   PARTITION p03 VALUES LESS THAN (30,40),    
  11.   PARTITION p04 VALUES LESS THAN (40,MAXVALUE),    
  12.   PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)    
  13. );    
  14.  
  15. CREATE TABLE p2 (    
  16.   a INT,    
  17.   b INT,    
  18.   c INT   
  19. )    
  20. PARTITION BY RANGE COLUMNS (a,b)    
  21. (    
  22.   PARTITION p01 VALUES LESS THAN (10,10),    
  23.   PARTITION p02 VALUES LESS THAN (10,20),    
  24.   PARTITION p03 VALUES LESS THAN (10,30),    
  25.   PARTITION p04 VALUES LESS THAN (10,MAXVALUE),    
  26.   PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)    
  27. )  

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

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

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

  1. CREATE TABLE p1_single (    
  2.   a INT,    
  3.   b INT,    
  4.   c INT   
  5. )    
  6. PARTITION BY RANGE COLUMNS (a)    
  7. (    
  8.   PARTITION p01 VALUES LESS THAN (10),    
  9.   PARTITION p02 VALUES LESS THAN (20),    
  10.   PARTITION p03 VALUES LESS THAN (30),    
  11.   PARTITION p04 VALUES LESS THAN (40),    
  12.   PARTITION p05 VALUES LESS THAN (MAXVALUE)    
  13. );  

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

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

  1. a=10    
  2. b=9    
  3. (a,b) < (10,10) ?    
  4. # evaluates to:    
  5. (a < 10)    
  6. OR   
  7. ((a = 10) AND ( b < 10))    
  8. # which translates to:    
  9. (10 < 10)    
  10. OR   
  11. ((1010 = 10) AND ( 9 < 10))  

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

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

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

【编辑推荐】

  1. 适合初学者的MySQL学习笔记之管理员常用操作总结
  2. 适合初学者的MySQL学习笔记之SELECT语句使用详解
  3. MySQL数据库存储引擎之MyISAM和InnoDB的区别对比
  4. 适合初学者的MySQL学习笔记之ORDER BY子句使用详解
  5. 适合初学者的MySQL学习笔记之MySQL常用命令操作技巧
责任编辑:赵鹏 来源: 博客园
相关推荐

2011-08-17 11:13:57

MySQL 5.5truncate分区

2011-08-17 11:00:51

MySQL 5.5非整数列分区

2011-08-17 12:48:09

MySQL 5.5分区

2023-10-11 13:42:21

2010-02-22 10:08:33

MySQL 5.5分区

2010-10-11 10:44:22

MySQL分区

2011-08-16 16:45:18

2017-05-22 20:29:29

Windows 10Windows分区方法

2011-01-18 09:51:59

Linux磁盘分区

2017-07-05 18:59:32

MySQL交换分区

2010-10-11 10:52:25

MySQL分区

2014-06-09 10:09:31

Linux磁盘分区

2010-05-13 10:00:10

SQL Server

2010-05-04 17:07:14

Windows 7分区

2021-12-29 16:13:03

鸿蒙HarmonyOS应用

2021-02-20 08:21:18

Hive动态分区

2010-11-10 14:47:11

SQL Server创

2010-03-05 14:50:56

Ubuntu硬盘分区

2010-02-04 14:57:25

Linux分区方案

2009-11-24 09:28:11

linux分区大磁盘分区
点赞
收藏

51CTO技术栈公众号