- 浏览: 253178 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
wls212:
...
数据库查询优化技巧(MySQL) -
wang1352083:
来看几个实例 1、客户/订单/订单项目 ...
MongoDB Schema Design(MongoDB模式设计)(中文简述版) -
RunUpwind:
感谢,对我很有帮助!
ruby install相关(远程安装时出现HTTP Response 302的解决办法) -
yinmang1215:
不错,感觉这些方面的文档真是稀缺,谢了。
MongoDB+Rails的Demo实现 -
fireflyman:
rake -T
Rake命令大全
参考博文:http://www.sziwap.com/wordpress/archives/10
对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
4.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)
4.12 分区键不能是一个子查询。 A partitioning key may not be a subquery, even if that subquery resolves to an integer value or NULL
4.13 只有RANG和LIST分区能进行子分区。HASH和KEY分区不能进行子分区。
4.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)
4.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'
4.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)
4.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
4.18 分区表的分区键创建索引,那么这个索引也将被分区。分区键没有全局索引一说。
4.19 在分区表使用ALTER TABLE … ORDER BY,只能在每个分区内进行order by。
发表评论
-
mysql proxy V0.8.2 测试问题记录
2012-03-08 15:40 19181、 问题:没法输出控制台日志。(控制台日志可以统计分 ... -
mysql用户管理
2012-02-27 16:30 1398网络转载:http://www.cnblogs.com/blo ... -
数据库查询优化技巧(MySQL)
2011-12-19 13:42 1715在数据库程序的开发中,性能是最让人关心和担心的问题之一, ... -
mysql服务器性能调优工具
2011-12-19 12:10 1926数据库服务器的性能在网络服务中往往起着至关重要的作用,通常 ... -
mysql主从服务器搭建配置
2011-12-19 12:07 1738主服务器的(db1)配置 ●my.cnf设置 [mysql ... -
mysql中如何获得数据库的大小
2011-07-15 13:33 2477转载:http://zhidao.zgsj.com/artic ... -
mysql中常用命令收集
2011-04-22 17:13 1143①查看表中各列的具体属性: show full col ... -
mysql慢查询功能介绍及其相关工具的使用
2011-03-07 11:43 3892【Backgroud】在以MySQL为 ... -
MySQL中查看表状态
2011-02-18 17:19 2641#MySQL中查看表状态 SHOW TABLE STATUS ... -
MySQL-Proxy负载平衡测试遇到的问题及其分析 && MySQL-Proxy工作机制
2010-12-23 16:19 4269(1)MySQL-Proxy负载平衡测试中遇到的问题及其分析 ... -
mysql中查看该台数据库服务器执行的查询次数
2010-11-26 17:26 2072mysql> show status like & ... -
mysql中GROUP BY的高级应用
2010-10-18 19:53 2002有SQL文如下所示: SELECT place_id, con ... -
mysql中GROUP BY结合GROUP_CONCAT的使用
2010-10-18 18:59 1657有查询语句如下所示: select id, type, si ... -
MySQL Proxy Version 0.8.0安装手顺
2010-09-08 15:56 3186MySQL Proxy Version 0.8.0安装 ... -
MySql查看数据库和表的创建语句
2010-07-27 16:59 19971博文参照:http://zhuixue.iteye.c ... -
查看mysql服务器的端口
2010-07-21 17:13 3350##########查看mysql服务器的端口####### ... -
MySQL Sandbox的安装
2010-07-13 17:37 1798安装MySQLSandbox 下载地址:https://la ... -
利用MySQL Sandbox同一台机器上创建多个MySQL服务器
2010-07-13 17:33 2742创第一个MySQL服务器---sp ... -
USING SPIDER (Simple case)
2010-07-12 17:28 1568利用spider storage engine的简单实 ... -
spider storage engine实践时遇到[Mysql::Error: This xid is already exist: COMMIT]的解决办法
2010-07-07 17:16 2085参考博文:http://ilgnep.iteye.com/bl ...
相关推荐
测试数据可帮助我们理解不同分区策略(如范围分区、列表分区、哈希分区)的优势和局限。 10. **性能监控**:通过测试数据,可以学习如何利用MySQL内置的性能监控工具(如performance_schema)来跟踪和诊断性能问题...
然而,MySQL分区也有其局限性,如: - **仅限整型列或可转化为整型的列进行分区**。 - **最大分区数量不超过1024个**。 - **分区列必须包含在所有唯一索引或主键中**。 - **不支持外键约束**。 - **不支持全文索引**...
然而,分区也有其局限性,例如,不是所有类型的 SQL 操作都支持分区,如某些复杂的联接操作可能不会利用分区的优势。此外,分区管理需要额外的资源,对于小规模的数据表,分区可能并不适用。 总的来说,MySQL 的...
MySQL 5.7 是 MySQL 数据库管理系统的一个重要版本,它引入了一系列新的特性和改进,这些特性旨在提高数据库性能、增强数据处理能力以及提升数据库管理的便利性。本文将深入探讨 MySQL 5.7 中的关键新增功能。 ####...
Galera Cluster 的局限性包括需要高配置的服务器和需要复杂的配置。它需要高配置的服务器来提供高性能的数据库服务,并且需要复杂的配置来确保集群的可用性。 1.3.4 注意事项 使用 Galera Cluster 集群需要注意...
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 ...
通过数据分区和并行处理,MySQL Cluster能够在大规模并发场景下提供高效的读写性能,尤其适用于高流量、大数据量的应用环境。 #### 四、限制与挑战 尽管MySQL Cluster带来了诸多优势,但在实际部署和运维过程中,...
- **查询缓存**:理解MySQL查询缓存的工作原理和局限性。 - **分区与分片**:如何通过分区策略来提高大数据量的处理能力。 6. **安全性**: - **权限管理**:GRANT和REVOKE命令的使用,理解用户权限的层次结构。...
尽管仍存在一些限制,如复制和分区功能的局限性,以及查询优化的提升空间,但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相关信息...
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相关信息...
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的FAQs、操作系统相关问题的指南(如Windows、Linux/Unix、OS X、Solaris平台指南...
MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取...
5. **复制**:MySQL的复制功能允许创建一个或多个从服务器,用于数据备份、负载均衡或提高可用性。在4.0.20中,主从复制的基础架构已经形成,但可能不如后来的版本稳定和高效。 6. **安全性和权限**:MySQL 4.0提供...