`

mysql primary key PARTITION 分区

阅读更多

尝试把数据库一个表分区

 

ALTER TABLE user 
PARTITION BY RANGE(TO_DAYS(`date`)) (
PARTITION p1004 VALUES LESS THAN (TO_DAYS('2010-5-1')),
PARTITION p1005 VALUES LESS THAN (TO_DAYS('2010-6-1')),
PARTITION p1006 VALUES LESS THAN (TO_DAYS('2010-7-1')),
PARTITION p1007 VALUES LESS THAN (TO_DAYS('2010-8-1')),
PARTITION p1008 VALUES LESS THAN (TO_DAYS('2010-9-1')),
PARTITION p1009 VALUES LESS THAN (TO_DAYS('2010-10-1')),
PARTITION p1010 VALUES LESS THAN (TO_DAYS('2010-11-1')),
PARTITION p1011 VALUES LESS THAN (TO_DAYS('2010-12-1')),
PARTITION p1012 VALUES LESS THAN (TO_DAYS('2011-1-1')),
PARTITION p9999 VALUES LESS THAN MAXVALUE);

 结果出现

ERROR 1503  A PRIMARY KEY must include all columns in the table's partitioning function

 

google一下,查出以下解释,来自官方文档,意思是在分区的表达式中的条件字段必须是那个表定义的唯一键的一部分(part of every unique key that the table may have.) 我上面会出错就是因为我在user表定义了主键,但`date`不是主键

解决的话可以把主键ID扩展成联合主键(`ID`,`date`),这样分区的条件字段就成了主键的一部分,这样就可以解决,理论上我想是这样,还没没实际试过, todo。

 

 

18.5.1.Partitioning Keys, Primary Keys, and Unique Keys
This section discusses the relationship of partitioning keys with primary keys and unique keys. The rule governing this relationship can be expressed as follows: All columns used in the partitioning expression for a partitioned table must be part of every unique key that the table may have.

 

In other words, every unique key on the table must use every column in the table's partitioning expression. (This also includes the table's primary key, since it is by definition a unique key. This particular case is discussed later in this section.)

分享到:
评论

相关推荐

    mysql实现自动创建与删除分区

    id INT AUTO_INCREMENT PRIMARY KEY, date_column DATE NOT NULL, -- 其他列 ) PARTITION BY RANGE (TO_DAYS(date_column)) ( PARTITION p_2021_01 VALUES LESS THAN (TO_DAYS('2021-02-01')), -- 其他分区 ); ...

    创建mysql表分区的方法

    2. **定义分区**:使用`PARTITION BY`关键字后跟分区类型(RANGE, LIST, HASH, 或 KEY),然后指定分区列和条件。 3. **添加数据**:向分区表中插入数据,MySQL会自动根据分区规则分配。 4. **管理分区**:可以添加...

    mysql-partition-and-Index.rar_partition

    MySQL支持多种分区类型,如范围分区(Range)、列表分区(List)、哈希分区(Hash)和键值分区(Key)。范围分区通常基于数值或日期范围,列表分区则依据预定义的列表值,哈希分区根据用户定义的函数将数据分发到...

    MySQL分区管理工具

    PRIMARY KEY (`id`,`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 PARTITION BY RANGE (YEAR(create_time))( PARTITION p2012 VALUES LESS THAN (2012) ENGINE = InnoDB, PARTITION p2013 VALUES LESS ...

    mysql分区资源整理

    4. **Key分区**:实质上是Hash分区的一种特殊形式,使用MySQL内部生成的哈希函数进行分区。 #### 三、分区限制与注意事项 - 在使用分区时,如果表具有主键或唯一键,则这些键必须包含分区键。这意味着分区键通常是...

    zabbix_mysql分区1

    针对大数据量的监控场景,对MySQL数据库进行分区优化可以显著提升查询效率和系统性能。 在Zabbix 2.0及更高版本中,`trends`和`history`这两个关键表不再使用外键,这使得它们支持MySQL的分区功能。分区是将大表的...

    mysql建表语句.zip

    例如,可以使用 `PARTITION BY RANGE` 或 `PARTITION BY LIST` 来对大表进行分区,将数据分布到多个物理存储单元,提高查询效率。假设我们有一个订单表,可以按时间进行分区: ```sql CREATE TABLE Orders ( ...

    MySQL优化之分区表

    5. KEY分区:通过使用“PARTITION BY KEY(algorithm=(alg_type))”来实现,每个分区的定义和选择是基于某列值的密钥值。 在创建分区表时,需要指定分区方式和分区的定义。例如,使用RANGE方式可以创建以下语句: ``...

    SQL Server 2005新特性之表分区的功能

    ALTER TABLE dbo.B add CONSTRAINT [PK_B] PRIMARY KEY CLUSTERED (ID) ON [D_PARTITION_SHEME](ID) ``` #### 四、表分区的优点 - **提高查询性能**:通过将数据分布在多个物理位置,可以显著减少单个磁盘的I/O...

    mysql分区功能详解,以及实例分析

    4. KEY分区:与HASH分区相似,但使用MySQL计算的哈希值。 四、分区的实现与检查 在安装MySQL时,应确保支持分区功能。可以运行`./configure --help`检查配置选项,或者通过`show variables like "%part%"`查询已...

    lampbrother mysql高级教程笔记 超详细

    MySQL 支持表的分区功能,能够提高查询性能,特别是在处理大数据集时非常有用。分区技术自 MySQL 5.1 版本开始支持。 **基本概念:** - **水平分区**:根据表中的某列值将表分成多个子表。 - **垂直分区**:将表中...

    mysql ocp题库总结

    1. 题目中提到的错误是`Duplicate entry '8' for key 'PRIMARY'`,这意味着在从服务器上尝试插入一条已经存在的主键值为8的记录。在GTID模式下,主从复制不是简单地跳过错误,而是需要正确处理以保持数据的一致性。...

    MySQL数据库分区功能的使用教程

    4. **键(KEY)**分区:类似于哈希分区,但哈希函数是基于MySQL内部计算的,适用于整数类型列。 5. **复合分区**:可以结合多种分区策略,比如RANGE和LIST的组合。 要启用MySQL的分区功能,需要确保MySQL版本在5.1及...

    MySQL分区表的基本入门教程

    PRIMARY KEY (`id`, `access_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 PARTITION BY RANGE (to_days(access_time)) ( PARTITION p1 VALUES LESS THAN (to_days(20190101)), PARTITION p2 VALUES LESS THAN...

    mySQL笔记介绍

    - **分区选项**:`PARTITION BY`(具体细节参考MySQL官方文档) **显示所有表:** ```sql SHOW TABLES [LIKE 'pattern']; ``` **查看表结构:** ```sql SHOW CREATE TABLE 表名; ``` ```sql DESC 表名; ``` ``...

    mysqlalter命令共5页.pdf.zip

    例如,`ALTER TABLE 表名 ADD CONSTRAINT 主键约束 PRIMARY KEY (列名);`。 9. **更改字符集**:`ALTER TABLE`也可以用来修改表的字符集和排序规则,如`ALTER TABLE 表名 DEFAULT CHARACTER SET 字符集 COLLATE ...

    MYSQL语句语法大全

    ALTER TABLE mytable ADD CONSTRAINT PRIMARY KEY (column_name); ``` 或者,如果你想更改表的字符集和整序,可以写成: ```sql ALTER TABLE mytable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ```...

    MySQL认证1z0-883[收集].pdf

    - 错误信息是`Duplicate entry '8' for key 'PRIMARY'`,表明尝试插入的ID值8已经在表`mytable`的主键上存在。 - 解决这个问题,可以使用`STOPSLAVE`命令停止复制,然后在从库上手动处理冲突。选项E `SET GLOBAL ...

    mysql命令大集会

    ALTER TABLE employees ADD CONSTRAINT pk_employees PRIMARY KEY (employee_id); ``` 外键的添加则需要指定引用的表和列: ```sql ALTER TABLE employees ADD CONSTRAINT fk_department FOREIGN KEY (department...

Global site tag (gtag.js) - Google Analytics