- 浏览: 289766 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chenchangqun:
这段示例代码没有客户端 没法实验
Java NIO原理和使用 -
congjl2002:
误,整理好了在发phk070832 写道垃圾代码,一大推的编译 ...
snmp trap的接收(jdmk方式) -
phk070832:
垃圾代码,一大推的编译错误,整理好了在发表吧。
snmp trap的接收(jdmk方式) -
zhangcctao:
我也遇到线程池的内存溢出问题。。不知道是不是这个原因呀?
多线程中使用静态方法 -
新入职:
分享了,这个eclise版本有没有讲究?我的3.3的可以么
windows下安装android及eclipse配置
Mysql5.1已经发行很久了,本文根据官方文档的翻译和自己的一些测试,对Mysql分区表的局限性做了一些总结,因为个人能力以及测试环境的原因,有可能有错误的地方,还请大家看到能及时指出,当然有兴趣的朋友可以去官方网站查阅。
本文测试的版本
mysql> select version(); +------------+ | version() | +------------+ | 5.1.33-log | +------------+ 1 row in set (0.00 sec)
一、关于Partitioning Keys, Primary Keys, and Unique Keys的限制
在5.1中分区表对唯一约束有明确的规定,每一个唯一约束必须包含在分区表的分区键(也包括主键约束)。
这句话也许不好理解,我们做几个实验:
CREATE TABLE t1 ( id INT NOT NULL, uid INT NOT NULL, PRIMARY KEY (id) ) PARTITION BY RANGE (id) (PARTITION p0 VALUES LESS THAN(5) ENGINE = INNODB, PARTITION p1 VALUES LESS THAN(10) ENGINE = INNODB ); CREATE TABLE t1 ( id INT NOT NULL, uid INT NOT NULL, PRIMARY KEY (id) ) PARTITION BY RANGE (id) (PARTITION p0 VALUES LESS THAN(5) ENGINE = MyISAM DATA DIRECTORY='/tmp' INDEX DIRECTORY='/tmp', PARTITION p1 VALUES LESS THAN(10) ENGINE = MyISAM DATA DIRECTORY='/tmp' INDEX DIRECTORY='/tmp' ); mysql> CREATE TABLE t1 -> ( id INT NOT NULL, -> uid INT NOT NULL, -> PRIMARY KEY (id), -> UNIQUE KEY (uid) -> ) -> PARTITION BY RANGE (id) -> (PARTITION p0 VALUES LESS THAN(5), -> PARTITION p1 VALUES LESS THAN(10) -> ); ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
二、关于存储引擎的限制
2.1 MERGE引擎不支持分区,分区表也不支持merge。
2.2 FEDERATED引擎不支持分区。这限制可能会在以后的版本去掉。
2.3 CSV引擎不支持分区
2.4 BLACKHOLE引擎不支持分区
2.5 在NDBCLUSTER引擎上使用分区表,分区类型只能是KEY(or LINEAR KEY) 分区。
2.6 当升级MYSQL的时候,如果你有使用了KEY分区的表(不管是什么引擎,NDBCLUSTER除外),那么你需要把这个表dumped在reloaded。
2.7 分区表的所有分区或者子分区的存储引擎必须相同,这个限制也许会在以后的版本取消。
不指定任何引擎(使用默认引擎)。
所有分区或者子分区指定相同引擎。
三、关于函数的限制
在mysql5.1中建立分区表的语句中,只能包含下列函数:
ABS()
CEILING() and FLOOR() (在使用这2个函数的建立分区表的前提是使用函数的分区键是INT类型),例如
mysql> CREATE TABLE t (c FLOAT) PARTITION BY LIST( FLOOR(c) )( -> PARTITION p0 VALUES IN (1,3,5), -> PARTITION p1 VALUES IN (2,4,6) -> );; ERROR 1491 (HY000): The PARTITION function returns the wrong type mysql> CREATE TABLE t (c int) PARTITION BY LIST( FLOOR(c) )( -> PARTITION p0 VALUES IN (1,3,5), -> PARTITION p1 VALUES IN (2,4,6) -> ); Query OK, 0 rows affected (0.01 sec)
DAY()
DAYOFMONTH()
DAYOFWEEK()
DAYOFYEAR()
DATEDIFF()
EXTRACT()
HOUR()
MICROSECOND()
MINUTE()
MOD()
MONTH()
QUARTER()
SECOND()
TIME_TO_SEC()
TO_DAYS()
WEEKDAY()
YEAR()
YEARWEEK()
四、其他限制
4.1 对象限制
下面这些对象在不能出现在分区表达式
Stored functions, stored procedures, UDFs, or plugins.
Declared variables or user variables.
4.2 运算限制
支持加减乘等运算出现在分区表达式,但是运算后的结果必须是一个INT或者NULL。 |, &, ^, <<, >>, , ~ 等不允许出现在分区表达式。
4.3 sql_mode限制
官方强烈建议你在创建分区表后,永远别改变mysql的sql_mode。因为在不同的模式下,某些函数或者运算返回的结果可能会不一样。
4.4 Performance considerations.(省略)
4.5 最多支持1024个分区,包括子分区。
当你建立分区表包含很多分区但没有超过1024限制的时候,如果报错 Got error 24 from storage engine,那意味着你需要增大open_files_limit参数。
4.6 不支持外键。MYSQL中,INNODB引擎才支持外键。
4.7 不支持FULLTEXT indexes(全文索引),包括MYISAM引擎。
mysql> CREATE TABLE articles ( -> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, -> title VARCHAR(200), -> body TEXT, -> FULLTEXT (title,body) -> ) -> PARTITION BY HASH(id) -> PARTITIONS 4; ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes
4.8 不支持spatial column types。
4.9 临时表不能被分区。
mysql> CREATE Temporary TABLE t1 -> ( id INT NOT NULL, -> uid INT NOT NULL, -> PRIMARY KEY (id) -> ) -> PARTITION BY RANGE (id) -> (PARTITION p0 VALUES LESS THAN(5) ENGINE = MyISAM, -> PARTITION p1 VALUES LESS THAN(10) ENGINE = MyISAM -> ); ERROR 1562 (HY000): Cannot create temporary table with partitions
4.10 log table不支持分区。
mysql> alter table mysql.slow_log PARTITION BY KEY(start_time) PARTITIONS 2; ERROR 1221 (HY000): Incorrect usage of PARTITION and log table
5.11 分区键必须是INT类型,或者通过表达式返回INT类型,可以为NULL。唯一的例外是当分区类型为KEY分区的时候,可以使用其他类型的列作为分区键( BLOB or TEXT 列除外)。
mysql> CREATE TABLE tkc (c1 CHAR) -> PARTITION BY KEY(c1) -> PARTITIONS 4; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE tkc2 (c1 CHAR) -> PARTITION BY HASH(c1) -> PARTITIONS 4; ERROR 1491 (HY000): The PARTITION function returns the wrong type mysql> CREATE TABLE tkc3 (c1 INT) -> PARTITION BY HASH(c1) -> PARTITIONS 4; Query OK, 0 rows affected (0.00 sec)
5.12 分区键不能是一个子查询。 A partitioning key may not be a subquery, even if that subquery resolves to an integer value or NULL
5.13 只有RANG和LIST分区能进行子分区。HASH和KEY分区不能进行子分区。
5.14 分区表不支持Key caches。
mysql> SET GLOBAL keycache1.key_buffer_size=128*1024; Query OK, 0 rows affected (0.00 sec) mysql> CACHE INDEX login,user_msg,user_msg_p IN keycache1; +-----------------+--------------------+----------+---------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-----------------+--------------------+----------+---------------------------------------------------------------------+ | test.login | assign_to_keycache | status | OK | | test.user_msg | assign_to_keycache | status | OK | | test.user_msg_p | assign_to_keycache | note | The storage engine for the table doesn't support assign_to_keycache | +-----------------+--------------------+----------+---------------------------------------------------------------------+ 3 rows in set (0.00 sec)
5.15 分区表不支持INSERT DELAYED.
mysql> insert DELAYED into user_msg_p values(18156629,0,0,0,0,0,0,0,0,0); ERROR 1616 (HY000): DELAYED option not supported for table 'user_msg_p'
5.16 DATA DIRECTORY 和 INDEX DIRECTORY 参数在分区表将被忽略。
这个限制应该不存在了:
mysql> CREATE TABLE t1 -> ( id INT NOT NULL, -> uid INT NOT NULL, -> PRIMARY KEY (id) -> ) -> PARTITION BY RANGE (id) -> (PARTITION p0 VALUES LESS THAN(5) ENGINE = MyISAM DATA DIRECTORY='/tmp' INDEX DIRECTORY='/tmp', -> PARTITION p1 VALUES LESS THAN(10) ENGINE = MyISAM DATA DIRECTORY='/tmp' INDEX DIRECTORY='/tmp' -> ); Query OK, 0 rows affected (0.01 sec)
5.17 分区表不支持mysqlcheck和myisamchk
在5.1.33版本中已经支持mysqlcheck和myisamchk
./mysqlcheck -u -p -r test user_msg_p; test.user_msg_p OK ./myisamchk -i /u01/data/test/user_msg_p#P#p0.MYI Checking MyISAM file: /u01/data/test/user_msg_p#P#p0.MYI Data records: 4423615 Deleted blocks: 0 - check file-size - check record delete-chain - check key delete-chain - check index reference - check data record references index: 1 Key: 1: Keyblocks used: 98% Packed: 0% Max levels: 4 Total: Keyblocks used: 98% Packed: 0% User time 0.97, System time 0.02 Maximum resident set size 0, Integral resident set size 0 Non-physical pagefaults 324, Physical pagefaults 0, Swaps 0 Blocks in 0 out 0, Messages in 0 out 0, Signals 0 Voluntary context switches 1, Involuntary context switches 5
5.18 分区表的分区键创建索引,那么这个索引也将被分区。分区键没有全局索引一说。
5.19 在分区表使用ALTER TABLE … ORDER BY,只能在每个分区内进行order by。
发表评论
-
手把手教你卸载oracle 10g
2010-11-25 19:35 979之前卸载过9i,没试过10g,所以找了这篇文章试试卸载10g ... -
mysql 存储过程异常处理
2010-07-02 20:26 8144当insert失败时,我希望 ... -
MySQL 存储过程实例
2010-07-02 20:17 1277MySQL 5.0以后的版本开始支持存储过程,存储过程具有一致 ... -
mysql存储过程基础
2010-07-02 20:12 1279mysql 5.0存储过程学习总结(转) 一.创 ... -
MySQL分区(Partition)功能试验(转帖)
2010-06-01 20:00 1739MySQL分区(Partition)功能试验2008-07-0 ... -
[转载]Oracle数据库关于SQL的执行计划
2010-01-31 15:18 1013本文的目的: 1、说一说Oracle的Optimizer ... -
多表连接查询示例
2009-11-30 22:03 1244看到这篇带图的关于sql的连接查询,转过来作为参考 S ... -
ORACLE高效sql
2009-11-16 20:38 1170No1:选择合适的优化器 No2:共享SQL 为了不重复解 ... -
ORACLE EXP/IMP的使用
2009-11-07 18:23 4201转过来进行学习 Oracle ... -
oracle表空间创建
2009-10-06 17:37 1918在SQL*Plus中:(1)如何添加删除数据库?(2)数据库就 ... -
PL/SQL开发中动态SQL的使用方法
2009-05-30 12:17 1357一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直 ... -
oracle分区表
2009-05-25 22:01 1549在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应 ... -
Oracle10g启动及连接问题
2009-03-08 20:04 1584前段时间使用oracle10g数 ... -
ORACLE10g远程停止数据库后不能启动的问题解决
2009-03-08 11:47 0前一阵子,使用oralce10g数据库,从远程客户端shutd ... -
oracle创建与mysql的dblink
2009-02-19 21:00 7635因为偶然的原因,想通过oracle访问mysql,要使orac ... -
oracle创建表空间
2009-02-16 22:16 54691.字典管理表空间 在orac ... -
oralce左连接与右连接小结
2009-02-08 22:30 2802因为使用oralce常用到左右连接,所以把他们小结了一下,以备 ... -
oracle客户端连接失败问题解决
2009-01-16 10:25 2347前一阵子,连接别的机器上的oracle,总是报ora- ... -
oracle锁相关sql语句
2008-12-11 20:51 18821.查询数据库中的锁select * from v$lock; ... -
oracle锁相关数据字典
2008-12-11 20:49 13431.关于V$lock表和相关视图的说明 Colum ...
相关推荐
### Oracle的表结构转成MySQL的表结构 #### 功能概述 本文介绍了一种将Oracle数据库中的表结构转换为MySQL数据库...尽管存在一定的局限性,但通过调整参数和手动检查生成的结果,可以有效地满足大多数迁移场景的需求。
然而,MySQL分区也有其局限性,如: - **仅限整型列或可转化为整型的列进行分区**。 - **最大分区数量不超过1024个**。 - **分区列必须包含在所有唯一索引或主键中**。 - **不支持外键约束**。 - **不支持全文索引**...
6.5MySQL查询优化器的局限性223 6.5.1关联子查询223 6.5.2UNION的限制228 6.5.3索引合并优化228 6.5.4等值传递229 6.5.5并行执行229 6.5.6哈希关联229 6.5.7松散索引扫描229 6.5.8最大值和最小值优化231 ...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...
每种表类型都有其优势和局限性,选择哪种类型取决于具体的应用需求。例如,如果你需要事务处理和高并发写入,InnoDB是最佳选择;而如果需要高速读取且数据丢失无妨,可以考虑Memory表。了解并正确选择MySQL表类型...
MySQL 5.7 是 MySQL 数据库管理系统的一个重要版本,它引入了一系列新的特性和改进,这些特性旨在提高数据库性能、增强数据处理能力以及提升数据库管理的便利性。本文将深入探讨 MySQL 5.7 中的关键新增功能。 ####...
- **查询缓存**:理解MySQL查询缓存的工作原理和局限性。 - **分区与分片**:如何通过分区策略来提高大数据量的处理能力。 6. **安全性**: - **权限管理**:GRANT和REVOKE命令的使用,理解用户权限的层次结构。...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...
然而,分区也有其局限性,例如,不是所有类型的 SQL 操作都支持分区,如某些复杂的联接操作可能不会利用分区的优势。此外,分区管理需要额外的资源,对于小规模的数据表,分区可能并不适用。 总的来说,MySQL 的...
尽管仍存在一些限制,如复制和分区功能的局限性,以及查询优化的提升空间,但MySQL作为一个开源的DBMS,已经展现出足够的实力。 **第一部分:MySQL架构与概念** 1. **MySQL逻辑架构** - **连接处理、认证和安全...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关...
MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...
MySQL是世界上最受欢迎的开源...总的来说,MySQL Windows 32位绿色版为用户提供了在32位Windows系统上快速部署和使用的数据库解决方案,虽然有一定的局限性,但对个人项目或者小型应用来说,仍然是一种实用的选择。
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT...