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分区 的相关文章

  • MySQL - 重命名列

    如何重命名 mysql 列help to content在我的桌子上tbl help mysql query ALTER TABLE tbl help CHANGE COLUMN help content 您必须在更改列语句中包含列的定义
  • Rails 创建 schema_migrations - Mysql2::Error: 指定的键太长

    我正在使用Rails 3 2 6和Mysql 6 0 9 但我在MySQL 5 2 25上有完全相同的错误 当我创建新数据库时 rake db create 然后当我尝试加载架构时 rake schema load 我收到此错误 Mysql
  • 如何解决 MySQL Workbench 上的这些行错误?

    正如您所看到的 我的代码中没有语法错误或类似的错误 你们能帮我吗 我想这只是错误标记机制中的一个小错误 尝试编辑代码或关闭此编辑器并打开一个新编辑器 如果您有重现此问题的步骤列表 您甚至可以创建一个错误报告 http bugs mysql
  • sqlalchemy 中的随机 ID(pylon)

    我正在使用 pylons 和 sqlalchemy 我想知道如何将一些随机 id 作为primary key 最好的方法是使用随机生成的 UUID import uuid id uuid uuid4 uuid 数据类型在某些数据库中本机可用
  • REPLACE MYSql 中的新行字符不起作用

    我执行了以下查询 由于某种原因它没有替换数据库中的换行符 它说 Rows matches 1 但没有变化 有什么问题吗 mysql gt UPDATE aboutme SET abouttext REPLACE abouttext n WH
  • mysql - 有什么方法可以帮助使用另一个索引进行全文搜索?

    假设我有一个 文章 表 其中包含以下列 article text fulltext indexed author id indexed 现在我想搜索特定作者撰写的文章中出现的术语 所以像这样 select from articles whe
  • MySQL 性能 DELETE 或 UPDATE?

    我有一个超过 10 7 行的 MyISAM 表 向其中添加数据时 我必须在最后更新 10 行 删除它们然后插入新行更快 还是更新这些行更快 应更新的数据不是索引的一部分 索引 数据碎片怎么样 UPDATE到目前为止要快得多 当你UPDATE
  • 如何在SQL中查找单元格中的重复单词

    我有一个名为 situation 和 entityid 的列 Entityid Situation 1234 In the the world of of 3456 Total universe is is a 任何人都可以给我查询以找到这
  • 在旧版本的 MySQL (<5.5.0) 中模拟 TO_SECONDS()

    出于性能和简单性的原因 我想以秒的形式获取 MySQL 3 x 服务器中 DATETIME 列的内容 或者实际上任何数字类型 我只是想在使用 UNIX TIMESTAMP 时避免所有明显的时区问题 the我表中的日期确实来自不同的区域设置
  • 脚本超时已过,如果要完成导入,请重新提交相同的文件,导入将恢复

    我有一个数据库 拉开拉链后的尺寸50mb拉链尺寸7mb所以当我尝试导入数据库时zipped 7mb 几分钟后 它抛出此错误 脚本超时已过 如果您想完成导入 请resubmit相同的文件和导入将恢复 我已经重新提交了 但仍然没有导入全部数据
  • 哈希密码字段使用什么数据类型以及长度?

    我不确定密码哈希是如何工作的 稍后将实现 但现在需要创建数据库模式 我正在考虑将密码限制为 4 20 个字符 但据我了解 加密后哈希字符串的长度将有所不同 那么 如何将这些密码存储在数据库中呢 更新 仅使用哈希函数不足以存储密码 你应该阅读
  • 如何获取 JDBC 中 UPDATE 查询影响的所有行?

    我有一项任务需要使用更新记录PreparedStatement 一旦记录被更新 我们知道更新查询返回计数 即受影响的行数 但是 我想要的不是计数 而是受更新查询影响的行作为响应 或者至少是受影响的行的 id 值列表 这是我的更新查询 UPD
  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • MySQL 查询中的窗口函数

    有没有办法在 SELECT 查询本身中动态地使用 MySQL 查询中的窗口函数 我知道在 PostgreSQL 中这是可能的 例如 下面是 PostgreSQL 中的等效查询 SELECT c server ip c client ip s
  • 将sql查询结果写入mysql中的文件

    我正在尝试使用 mysql 将查询结果写入文件 我在一些地方看到了有关 outfile 构造的一些信息 但似乎这只将文件写入正在运行 MySQL 的机器 在本例中是远程机器 即数据库不在我的本地机器上 或者 我还尝试运行查询并从 mysql
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • MySQL 将表的校验和存储在另一个表中

    语境 我们有包含大量表的大型数据库 他们中的大多数 99 都使用innodb 我们希望有一个日常流程来监视哪个表已被修改 当他们使用 innodb 的值时Update time from SHOW table STATUS from inf
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • 如何绑定值 INSERT INTO mysql perl

    我有下面的代码可以工作 但我需要知道如何绑定它们以确保安全 如果我只是将 new row 替换为 并将其放入执行中我收到错误 感谢您的帮助 foreach my field account field order new row param
  • MySQL如何从多个表中获取数据

    我正在寻找 php MySQL jquery 的帮助 我有2张桌子 table1表 1 有 4 列 id 标题 desc thumb img tabel2表 2 有 3 列 id 表 id img 我只想将 2 个表与 get QS 的值进

随机推荐

  • 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