mysql 表分区优缺点_Mysql分区表局限性总结

本文测试的版本

XML/HTML代码

mysql>select version();

+------------+

| version() |

+------------+

| 5.1.33-log |

+------------+

1 row in set (0.00 sec)

一、关于Partitioning Keys, Primary Keys, and Unique

Keys的限制

在5.1中分区表对唯一约束有明确的规定,每一个唯一约束必须包含在分区表的分区键(也包括主键约束)。

这句话也许不好理解,我们做几个实验:

SQL代码

CREATETABLEt1

( id INTNOTNULL,

uid INTNOTNULL,

PRIMARYKEY(id)

)

PARTITION BYRANGE (id)

(PARTITION p0 VALUESLESS THAN(5) ENGINE = INNODB,

PARTITION p1 VALUESLESS THAN(10) ENGINE = INNODB

);

CREATETABLEt1

( id INTNOTNULL,

uid INTNOTNULL,

PRIMARYKEY(id)

)

PARTITION BYRANGE (id)

(PARTITION p0 VALUESLESS THAN(5) ENGINE = MyISAM DATA DIRECTORY='/tmp'INDEXDIRECTORY='/tmp',

PARTITION p1 VALUESLESS THAN(10) ENGINE = MyISAM DATA DIRECTORY='/tmp'INDEXDIRECTORY='/tmp'

);

mysql> CREATETABLEt1

-> ( id INTNOTNULL,

-> uid INTNOTNULL,

-> PRIMARYKEY(id),

-> UNIQUEKEY(uid)

-> )

-> PARTITION BYRANGE (id)

-> (PARTITION p0 VALUESLESS THAN(5),

-> PARTITION p1 VALUESLESS THAN(10)

-> );

ERROR 1503 (HY000): A UNIQUEINDEXmust includeallcolumnsinthetable's partitioningfunction

二、关于存储引擎的限制

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类型),例如

XML/HTML代码

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引擎。

SQL代码

mysql>CREATETABLEarticles (

-> id INTUNSIGNED AUTO_INCREMENTNOTNULLPRIMARYKEY,

-> title VARCHAR(200),

-> body TEXT,

-> FULLTEXT (title,body)

-> )

-> PARTITION BYHASH(id)

-> PARTITIONS 4;

ERROR 1214 (HY000): The used tabletype doesn't support FULLTEXT indexes

4.8

不支持spatial column types。

4.9 临时表不能被分区。

SQL代码

mysql>CREATETemporaryTABLEt1

-> ( id INTNOTNULL,

-> uid INTNOTNULL,

-> PRIMARYKEY(id)

-> )

-> PARTITION BYRANGE (id)

-> (PARTITION p0 VALUESLESS THAN(5) ENGINE = MyISAM,

-> PARTITION p1 VALUESLESS THAN(10) ENGINE = MyISAM

-> );

ERROR 1562 (HY000): Cannot createtemporarytablewithpartitions

4.10

log table不支持分区。

SQL代码

mysql>altertablemysql.slow_log PARTITIONBYKEY(start_time) PARTITIONS 2;

ERROR 1221 (HY000): Incorrect usage ofPARTITIONandlogtable

5.11

分区键必须是INT类型,或者通过表达式返回INT类型,可以为NULL。唯一的例外是当分区类型为KEY分区的时候,可以使用其他类型的列作为分区键(

BLOB or TEXT 列除外)。

SQL代码

mysql>CREATETABLEtkc (c1CHAR)

-> PARTITION BYKEY(c1)

-> PARTITIONS 4;

Query OK, 0 rowsaffected (0.00 sec)

mysql> CREATETABLEtkc2 (c1CHAR)

-> PARTITION BYHASH(c1)

-> PARTITIONS 4;

ERROR 1491 (HY000): The PARTITION functionreturnsthe wrong type

mysql> CREATETABLEtkc3 (c1INT)

-> PARTITION BYHASH(c1)

-> PARTITIONS 4;

Query OK, 0 rowsaffected (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。

SQL代码

mysql>SETGLOBALkeycache1.key_buffer_size=128*1024;

Query OK, 0 rowsaffected (0.00 sec)

mysql> CACHE INDEXlogin,user_msg,user_msg_pINkeycache1;

+-----------------+--------------------+----------+---------------------------------------------------------------------+

| 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 forthetabledoesn't support assign_to_keycache |

+-----------------+--------------------+----------+---------------------------------------------------------------------+

3 rowsinset(0.00 sec)

5.15

分区表不支持INSERT DELAYED.

SQL代码

mysql>insertDELAYEDintouser_msg_pvalues(18156629,0,0,0,0,0,0,0,0,0);

ERROR 1616 (HY000): DELAYED optionnotsupportedfortable'user_msg_p'

5.16

DATA DIRECTORY 和 INDEX DIRECTORY 参数在分区表将被忽略。

这个限制应该不存在了:

SQL代码

mysql>CREATETABLEt1

-> ( id INTNOTNULL,

-> uid INTNOTNULL,

-> PRIMARYKEY(id)

-> )

-> PARTITION BYRANGE (id)

-> (PARTITION p0 VALUESLESS THAN(5) ENGINE = MyISAM DATA DIRECTORY='/tmp'INDEXDIRECTORY='/tmp',

-> PARTITION p1 VALUESLESS THAN(10) ENGINE = MyISAM DATA DIRECTORY='/tmp'INDEXDIRECTORY='/tmp'

-> );

Query OK, 0 rowsaffected (0.01 sec)

5.17

分区表不支持mysqlcheck和myisamchk

在5.1.33版本中已经支持mysqlcheck和myisamchk

SQL代码

./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

- checkfile-size

- checkrecorddelete-chain

- checkkeydelete-chain

- checkindexreference

- checkdata recordreferencesindex: 1

Key: 1: Keyblocks used: 98% Packed: 0%Maxlevels: 4

Total: Keyblocks used: 98% Packed: 0%

Usertime0.97, Systemtime0.02

Maximum resident setsize0, Integral residentsetsize0

Non-physical pagefaults 324, Physical pagefaults 0, Swaps 0

Blocks in0out0, Messagesin0out0, Signals 0

Voluntary context switches 1, Involuntary context switches 5

5.18

分区表的分区键创建索引,那么这个索引也将被分区。分区键没有全局索引一说。

5.19 在分区表使用ALTER TABLE … ORDER BY,只能在每个分区内进行order by。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# PagedList 真分页

一&#xff1a;nuget 下载 PagedList 二&#xff1a;前端页面 1.需要的数据 model PagedList.IPagedList<DeviceModel>  using PagedList.Mvc 2.使用数据 foreach (var item in Model)   {    <tr> <td>item.Name</td>       <td>…

leetcode1497. 检查数组对是否可以被 k 整除

给你一个整数数组 arr 和一个整数 k &#xff0c;其中数组长度是偶数&#xff0c;值为 n 。 现在需要把数组恰好分成 n / 2 对&#xff0c;以使每对数字的和都能够被 k 整除。 如果存在这样的分法&#xff0c;请返回 True &#xff1b;否则&#xff0c;返回 False 。 示例 1…

计算机页面设置代码,计算机二级考试Access辅导:页面设置模块代码分享

Dim up, dn, le, ri, si, liAs Single , co As string’定义边距及页面函数Sub ymszmk(strName As String) ’页面设置模块On Error GoTo Err_ymszmkIf Nz(DCount("*", "REPORTLIP", "REPORT’" & strName & "’")) 0 ThenMs…

让我们了解Set及其在JavaScript中的独特功能

by Asif Norzai通过Asif Norzai 让我们了解Set及其在JavaScript中的独特功能&#x1f3b2; (Lets learn about Set and its unique functionality in JavaScript &#x1f3b2;) 设置&#x1f3b2; (SET &#x1f3b2;) ES2015/ES6 gave us a lot of useful tools and feature…

C语言第二次博客作业---分支结构

一、PTA实验作业 题目1&#xff1a;计算分段函数[2] 本题目要求计算下列分段函数f(x)的值&#xff1a; 1.实验代码 double x,result;scanf("%lf",&x);if(x>0){resultsqrt(x);}else{resultpow(x1,2)2*x1/x;}printf("f(%.2f) %.2f",x,result); 2 设计…

oracle+数据到+mysql数据库乱码_oracle数据mysql数据库乱码

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

ajax 不执行

1、get形式访问&#xff1a; 一个相同的URL 只有一个结果&#xff0c;所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果&#xff0c;post则不会 解决办法: 1、urlnew Date(); &#xff08;每次访问时url不同&#xff09; 2、 type : get,   …

leetcode870. 优势洗牌(贪心算法)

给定两个大小相等的数组 A 和 B&#xff0c;A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。 返回 A 的任意排列&#xff0c;使其相对于 B 的优势最大化。 示例 1&#xff1a; 输入&#xff1a;A [2,7,11,15], B [1,10,4,11] 输出&#xff1a;[2,11,…

Mysql中行转列和列转行

一、行转列即将原本同一列下多行的不同内容作为多个字段&#xff0c;输出对应内容。建表语句DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT 用户id, subject VARCHAR(20) COMMENT…

OSChina 周四乱弹 ——妹子喜欢的是程序员 这是标准……

2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单&#xff08;2017&#xff09;请戳&#xff08;这里&#xff09; 【今日歌曲】 一叶孤鸿 &#xff1a;分享Nanaka的单曲《いのちの名前&#xff08;Cover 木村弓&#xff09;》 《いのちの名前&#xff08;C…

阿里薪资谈判技巧_如何像专业人士一样处理技术职业中的薪资谈判

阿里薪资谈判技巧by Aline Lerner通过艾琳勒纳(Aline Lerner) 如何像专业人士一样处理技术职业中的薪资谈判 (How to handle salary negotiations in your tech career like a pro) 确切地谈薪水时要说些什么 (Know exactly what to say when negotiating your salary) There …

xp系统sql服务器怎么找,SQL文件在winxp系统下怎么打开

很多用户不知道SQL文件是什么?SQL文件怎么打开?我们存储数据时候经常会遇到SQL文件&#xff0c;如果你不知道WinXP系统SQL文件是什么以及怎么打开的话&#xff0c;那就赶紧看看小编整理的以下文章内容吧!SQL文件是什么?学习编程的同学可能都知道SQL是一种高级的非过程化的编…

Silverlight 设计器加载错误

每次打开silverlight页面出如下错误 然后设计器不能将页面加载出来 最后找了蛮多资料的 感觉这个原因有可能&#xff1a;“控制面板的添加删除程序那里&#xff0c;选中Microsoft Silverlight&#xff0c;看看他的版本&#xff0c;是否与所装的SDK的版本号一致。就算两个版本号…

mysql索引优化实际例子_MySQL索引优化的实际案例分析

Order by desc/asc limit M是我在mysql sql优化中经常遇到的一种场景&#xff0c;其优化原理也非常的简单&#xff0c;就是利用索引的有序性&#xff0c;优化器沿着索引的顺序扫描&#xff0c;在扫描到符合条件的M行数据后&#xff0c;停止扫描&#xff1b;看起来非常的简单&am…

leetcode441. 排列硬币(二分查找)

你总共有 n 枚硬币&#xff0c;你需要将它们摆成一个阶梯形状&#xff0c;第 k 行就必须正好有 k 枚硬币。 给定一个数字 n&#xff0c;找出可形成完整阶梯行的总行数。 n 是一个非负整数&#xff0c;并且在32位有符号整型的范围内。 示例 1: n 5 硬币可排列成以下几行: …

【洛谷 P2051】 [AHOI2009]中国象棋(DP)

题目链接 首先想到状压dp&#xff0c;但是\(n,m\)高达100&#xff0c;怎么压&#xff1f; 容易发现&#xff0c;每行每列最多两个象棋&#xff0c;否则就直接gg了。 一个巧妙的设置状态的方式是&#xff0c;只需要记录到当前行有多少列是放了1个炮和2个炮。 然后每一行有3种选择…

循环 直到 python_如果您在Python中存在慢循环,则可以对其进行修复……直到无法解决为止...

循环 直到 pythonby Maxim Mamaev马克西姆马马耶夫(Maxim Mamaev) Let’s take a computational problem as an example, write some code, and see how we can improve the running time. Here we go.让我们以一个计算问题为例&#xff0c;编写一些代码&#xff0c;看看如何改…

阿里云视频点播解决方案使用教程

2019独角兽企业重金招聘Python工程师标准>>> 课程介绍 视频点播&#xff08;ApsaraVideo for VoD&#xff0c;简称VoD&#xff09;是集视频音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。 产品详情&#xff1a…

云服务器安装操作系统后如何连接,服务器如何安装操作系统

服务器如何安装操作系统 内容精选换一换如果您需要使用毕昇编译器&#xff0c;则需要先在服务端安装毕昇编译器。毕昇编译器基于开源LLVM开发&#xff0c;并进行了优化和改进&#xff0c;同时将flang作为默认的Fortran语言前端编译器&#xff0c;是针对鲲鹏平台的高性能编译器。…

换行符

非原创windows保留\r\n作为换行符的原因&#xff1a; 回车键为什么叫回车键&#xff0c;大家有想过没有&#xff0c;字面意思是回去的车子。 第一台打印机&#xff0c;每一行打印完了之后在打印第二行之前&#xff0c;这个喷墨的玩意儿需要先回到这一行的行首&#xff0c;这叫回…