MySQL之KEY分区和LINEAR KEY分区

2023-11-13

KEY分区

       KEY分区与HASH分区相似,当然有不同点

(1)在HASH分区中,可以使用整数列或者基于列值的表达式,即PARTITION BY HASH(expr),而在KEY分区中,直接基于列,PARTITION BY KEY(column_list),column_list是列名列表,这有点像LIST分区和LIST COLUMNS分区,一个基于列值或者列值表达式,另一个直接基于列值或者列值列表;

(2)在HASH分区中,使用表达式expr对分区数num求模MOD(expr,num)来计算数据行的分区号,而在KEY分区中,使用MySQL服务器的哈希函数,NDB集群使用MD5(),对于使用其他存储引擎的表,服务器使用自己的内部哈希函数,该函数基于与PASSWORD()相同的算法;

(2)KEY分区可以接收0个或者多个列,即PARTITION BY KEY()或者PARTITION BY KEY(column_list);

基于INT类型字段,创建KEY分区:

CREATE TABLE k1 (
    id INT,
    name VARCHAR(20)
)
PARTITION BY KEY(id)
PARTITIONS 2;

基于VARCHAR类型,创建KEY分区:

CREATE TABLE k1 (
    id INT,
    name VARCHAR(20)
)
PARTITION BY KEY(name)
PARTITIONS 2;

基于多个列创建分区:

CREATE TABLE k1 (
    id INT ,
    name VARCHAR(20)
)
PARTITION BY KEY(id,name)
PARTITIONS 2;

(3)如果表有主键,用作分区键的任何列必须是表的主键,如果没有指定列名作为分区键,则使用表的主键(如果有主键),例如:

CREATE TABLE k1 (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(20)
)
PARTITION BY KEY()
PARTITIONS 2;

KEY()中并没有指定具体的列,则使用主键id作为分区键。等价于

CREATE TABLE k1 (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(20)
)
PARTITION BY KEY(id)
PARTITIONS 2;

如下方式创建KEY分区会报错:

CREATE TABLE k1 (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(20)
)
PARTITION BY KEY(name)
PARTITIONS 2;

 (4)如果没有主键,但是有一个唯一键,那么分区键的任何列都必须是唯一键的一部分。例如:

CREATE TABLE k1 (
    id INT NOT NULL,
    name VARCHAR(20),
    UNIQUE KEY (id)
)
PARTITION BY KEY()
PARTITIONS 2;

k1中没有主键,但是定义了唯一键id,使用唯一键作为分区键。

如果唯一键没有定义为NOT NULL,会报错,如下:

 如下三种方式都可以创建KEY分区表:

CREATE TABLE k1 (
    id INT NOT NULL,
    name VARCHAR(20),
    UNIQUE KEY (id,name)
)
PARTITION BY KEY(id)
PARTITIONS 2;
CREATE TABLE k1 (
    id INT NOT NULL,
    name VARCHAR(20),
    UNIQUE KEY (id,name)
)
PARTITION BY KEY(name)
PARTITIONS 2;
CREATE TABLE k1 (
    id INT NOT NULL,
    name VARCHAR(20),
    UNIQUE KEY (id,name)
)
PARTITION BY KEY(id,name)
PARTITIONS 2;

但是如下方式创建分区表还会报错:

CREATE TABLE k1 (
    id INT NOT NULL,
    name VARCHAR(20),
    UNIQUE KEY (id,name)
)
PARTITION BY KEY()
PARTITIONS 2;

原因是KEY()中并未指定列。

注:向KEY分区表中插入数据,数据存储到哪个分区并不一定使用的是像HASH分区中的求模运算

LINEAR KEY分区

与LINEAR HASH分区类似,LINEAR KEY分区使用的也是二次幂(powers-of-two)算法,分区创建语法如下:

CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL之KEY分区和LINEAR KEY分区 的相关文章

  • Django 尝试使用错误的数据库用户

    已解决 我使用的是 USERNAME 而不是之前尝试使用 Postgres 驱动程序时使用的 USER 我正在尝试将我的 django 项目连接到 RDS MySQL 数据库 我可以在 MySQL Workbench 和 mysql 命令行
  • 如何确定c3p0 max_statements

    我想知道如何正确确定 c3p0 max statements 使用什么值 我经历过一些缓存死锁 这似乎指向我的 max statements 配置 基于我读过的所有 SO 问答 我正在使用 mysql 当我进行一些有 4 个活动线程的多线程
  • 无法使用 PDO 插入 MySQL 数据库...没有错误

    我遇到一个问题 无法使用 PDO 将任何内容插入 MySQL 数据库 我没有收到任何错误 但每当我检查数据库是否已插入行时 表都是空的 我知道我有一个到数据库的连接 因为我可以选择但不能插入 这是我扩展 PDO 的类 class Datab
  • mysql故障转移:如何选择slave作为新的master?

    我是 mysql 新手 当涉及到故障转移时 哪个从机应该晋升为新的主机 例如 A是master B和C是slave A对B和C进行异步复制 在某个时间点 B 从 A 接收的数据多于 C A 崩溃 如果我们将C提升为新的master 并将B的
  • Hibernate 乐观锁..它是如何工作的?

    我正在阅读下面关于休眠乐观锁定的博客 我打算将它与休眠一起使用 但是 我有一个担忧 我们有java代码和c 代码 都连接到一个数据库 虽然java代码可以使用hibernate来实现乐观锁定 但我想让c 代码做同样的事情 此外 C 代码正在
  • 在cakephp 3中动态更改数据库连接

    我正在尝试更改中使用的数据库连接蛋糕php 3在飞行中 我找到的这个问题的每个答案都指的是蛋糕PHP 2 These https stackoverflow com questions 27655613 multiple databases
  • 为什么 LOCK TABLES [table] WRITE 不阻止表读取?

    根据http dev mysql com doc refman 5 0 en lock tables html http dev mysql com doc refman 5 0 en lock tables html如果我锁定一张表以在
  • PyInstaller,规范文件,导入错误:没有名为“blah”的模块

    我正在尝试通过构建 python 脚本py安装程序 http www pyinstaller org 我使用以下命令来配置 生成规范文件并构建 wget pyinstaller zip extracted it python Configu
  • 使用 Symfony 表单上传多个文件

    UPDATED在我的 Symfony 项目中 我能够上传单个图像 现在我正在尝试上传多个图像 class ImageFile extends AbstractType param FormBuilderInterface builder p
  • HTAccess - 令人困惑的干净网址

    如果我想简单地重定向 clients page to clients php view page我会使用像这样简单的东西 它效果很好 Options FollowSymlinks RewriteEngine on RewriteRule c
  • Mysql - Mysql2::错误:字符串值不正确:

    所以我建造了一个刮刀并拉动一些物体 问题是有些是外语 它使 mysql 数据库有点崩溃 这是我得到的错误 知道我能用这个做什么吗 谢谢 Mysql2 错误 列的字符串值不正确 xC5 x8Dga 第 1 行的 描述 插入sammiches
  • 在 MySQL 数据库中存储图像文件或 URL?哪个更好? [复制]

    这个问题在这里已经有答案了 可能的重复 在数据库中存储图像 是还是否 https stackoverflow com questions 3748 storing images in db yea or nay 数据库中的图像与文件系统中的
  • 如何用 UNION 运算符替换 OR 运算符?

    这是我的查询 SELECT h id h subject h body matnF h amount h keywords tags h closed h author id author h AcceptedAnswer h type h
  • SQL 检查一组日期是否在指定的日期范围内

    我有一个表 其中保存架构中房间不可用的日期 ROOM ID DATE UNAVAILABLE 我需要一个 sql 查询来检查两个日期范围内是否有可用房间 类似于 Select All rooms that are constantly av
  • Codeigniter 加入多个条件

    我正在使用 Codeigniter Active Records 课程 我想加入我的users与我的桌子clients表 这样我就可以显示用户的 真实 姓名 而不仅仅是他们的 ID 这是什么clients表看起来像 示例 列 a 1 a 2
  • Preg_replace() 删除除查询结尾之外的所有内容

    首先 为我糟糕的英语感到抱歉 我有这样的疑问 SELECT t1 SELECT COUNT FROM table a t2 WHERE t1 id t2 id c AND t2 status 1 AS aula FROM table c t
  • C#:SQL 查询生成器类

    在哪里可以找到好的 SQL 查询构建器类 我只需要一个简单的类来构建 SQL 字符串 仅此而已 我需要它用于 C 和 MySql 我真的不需要像 Linq 或 NHibernate 这样的东西 谢谢 由于 Google 将我引导至此页面 我
  • 如何将 MySQL 数据库更改为 UTC?

    我使用的是 Windows 7 对数据库方面的东西有点陌生 我尝试在 Google 上搜索如何将系统时区更改为 UTC 但文档有些高级 我不太确定如何更改此字段 在 my ini 文件的 mysqld 部分下 添加以下行 default t
  • 单行的总和值?

    我有一个 MySQL 查询 它返回由一系列 1 和 0 组成的单行 它用于进度条指示器 我现在在代码中对它进行求和 但我尝试对查询中的值求和 并意识到我无法使用 SUM 因为它们有很多列 但只有一行 有没有办法可以在查询中自动求和 就像这样
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query

随机推荐

  • linux统计当前目录文件个数

    管道命令的形式是 命令1 命令2 其中命令2是管道命令 管道命令可以是查找字符串的grep命令 也可以是sort这样的排序命令 也可以是wc这样的统计命令 运行ls l会输出当前目录下的文件以及目录的信息 则只要在当前目录的输出结果中统计出
  • 算法训练 大小写转换 JAVA

    算法训练 大小写转换 JAVA 问题描述 编写一个程序 输入一个字符串 长度不超过20 然后把这个字符串内的每一个字符进行大小写变换 即将大写字母变成小写 小写字母变成大写 然后把这个新的字符串输出 输入格式 输入一个字符串 而且这个字符串
  • 开源进展

    WeBASE是一个友好 功能丰富的区块链中间件平台 通过一系列通用功能组件和实用工具 助力社区开发者更快捷地与区块链进行交互 目前WeBASE已更新迭代至v3 1 0版本 本次更新中 WeBASE带来了最新的合约Java脚手架导出功能 完成
  • 富甲一方的MetaRim震撼来袭,是一个结合元宇宙链游的NFT机甲

    MetaRim是一个结合元宇宙链游的NFT机甲 在去年底 知名漫画作家宫崎骏授权了元宇宙项目 MetaRim 并同意 MetaRim 将宫崎骏所创造的十部作品当作素材推出相关 NFT 这也是MetaRim首次为众人所知 扩展场景 机甲Gam
  • 面向对象概述、类与对象内存图、构造方法、构造器、构造方法重载、构造方法作用、this关键字、static

    面向对象编程思想 按照人类正常的思维去编程 面向过程 一 面向对象编程导图 可以把类理解为模板 对象理解为具体的产品 在类外可以通过对象 属性 对象 行为访问属性和行为 在类内直接访问属性和行为 一旦new就在堆汇总给创建了新的对象 对象和
  • MySQL -2 指令

    客户端SQL指令记录 针对 数据库和针对数据表 一 数据库 1 查看当前所有数据库 show databases 2 创建数据库 create database 数据库名 DEFAULT CHARSET utf8 COLLATE utf8
  • 第十二讲-讲为什么我的MySQL会“抖”一下

    为什么我的MySQL会 抖 一下 当内存数据页跟磁盘数据页内容不一致的时候 我们称这个内存页为 脏页 内存数据写入到磁盘后 内存和磁盘上的数据页的内容就一致了 称为 干净页 抖动的时候应该是在刷脏页 第一种场景是 粉板满了 记不下了 这时候
  • 用opencv2的C api 给图片画矩形框

    使用opencv 3 4 6 Ubuntu系统 步骤 安装opencv 过程可以参考 https docs opencv org master d7 d9f tutorial linux install html 编程 opencv 3 4
  • 0基础也能看懂,软件测试怎么去介绍一个项目的测试流程?

    软件测试流程及规范 一 目标 制定完整且具体的测试路线和流程 为快速 高效和高质量的软件测试提供基础流程框架 最终目标是实现软件测试规范化 标准化 二 测试流程说明 三 需求分析 需求分析由SA制定 要求细化每一个功能的细节 每一个按钮的位
  • 华为OD机试真题-最大报酬【2023.Q1】

    题目内容 小明每周上班都会拿到自己的工作清单 工作清单内包含n项工作 每项工作都有对应的耗时时间 单位h 和报酬 工作的总报酬为所有已完成工作的报酬之和 那么请你帮小明安排一下工作 保证小明在指定的工作时间内工作收入最大化 输入描述 输入的
  • 基于c++的包装者模式初探。

    ifndef INPUTSTREAM H define INPUTSTREAM H class Inputstream public virtual void read 0 virtual Inputstream endif ifndef
  • TensorRT学习笔记--序列化(Serialize)和反序列化(Deserialize)

    目录 前言 1 序列化和反序列化的概念 2 代码实现 2 1 序列化并保存模型 2 2 反序列化加载模型 2 3 完整代码 前言 所有代码均基于 Tensor RT 8 2 5 版本 使用的是 Python 环境 1 序列化和反序列化的概念
  • 电路交换,报文交换与分组交换

    1 电路交换 由于电路交换在通信之前要在通信双方之间建立一条被双方独占的物理通路 由通信双方之间的交换设备和链路逐段连接而成 因而有以下优缺点 优点 由于通信线路为通信双方用户专用 数据直达 所以传输数据的时延非常小 通信双方之间的物理通路
  • Java开发环境不再需要配置classpath!

    前言 之前发布了关于java开发环境配置的文章 经过与网友的交流 我了解到在jdk1 5以后 java开发环境配置的时候 确实不需要对classpath进行配置 但市面上的书籍 以及一些博客 还是老一套 继续推荐配置classpath 并且
  • Jmeter 调用python3脚本

    前言 Jmeter 调用 Jython的Jar包 虽然可以执行python代码 但是只支持python2 7及2 7以下版本的 目前使用的都是py3 0以上的版本 所以放弃这种方法 解决方法 通过jmeter的BeanShell取样器 通过
  • websocket 简介

    一 WebSocket是html5新增加的一种通信协议 目前流行的浏览器都支持这个协议 例如Chrome Safrie Firefox Opera IE等等 对该协议支持最早的应该是chrome 从chrome12就已经开始支持 随着协议草
  • Centos7 修改主机名

    简介 在CentOS中 有三种定义的主机名 静态的 static 瞬态的 transient 和灵活的 pretty 静态主机名也称为内核主机名 是系统在启动时从 etc hostname自动初始化的主机名 瞬态主机名是在系统运行时临时分配
  • Windows+Ubuntu双系统下卸载Ubuntu

    记录一下自己卸载Ubuntu的步骤 防止以后再卸载重新找教程 1 删除Ubuntu的分区 步骤1 打开 我的电脑 选择 管理 点击 磁盘管理 步骤2 确定Ubuntu系统所在的磁盘分区 我的是磁盘1的磁盘分区6 7 8 9 然后一一删除 选
  • python每日一题_Python每日一题 001

    Talk is Cheap show me the code Linus Torvalds 将你的 QQ 头像 或者微博头像 右上角加上红色的数字 类似于微信未读信息数量那种提示效果 类似于图中效果 环境准备 安装PIL模块 Windows
  • MySQL之KEY分区和LINEAR KEY分区

    KEY分区 KEY分区与HASH分区相似 当然有不同点 1 在HASH分区中 可以使用整数列或者基于列值的表达式 即PARTITION BY HASH expr 而在KEY分区中 直接基于列 PARTITION BY KEY column