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

  • 如何确定c3p0 max_statements

    我想知道如何正确确定 c3p0 max statements 使用什么值 我经历过一些缓存死锁 这似乎指向我的 max statements 配置 基于我读过的所有 SO 问答 我正在使用 mysql 当我进行一些有 4 个活动线程的多线程
  • Android 应用程序和 MySql 连接无法连接。打开

    当我尝试打开连接时发生错误并显示 System TypeInitializationException MySql Data MySqlClient Replication ReplicationManager 的类型初始值设定项引发异常
  • 如何调试 MySQL 存储过程?

    我当前的调试存储过程的过程非常简单 我创建一个名为 debug 的表 在存储过程运行时从其中插入变量值 这允许我查看脚本中给定点的任何变量的值 但是有没有更好的方法来调试 MySQL 存储过程 下列debug msg可以调用过程来简单地将调
  • MySQL 错误:列“时间”不能为空

    我收到错误 使用下面的查询时 列 时间 不能为空 第一次没有重复时工作正常 但当尝试再次更新时 我收到错误 列 时间 不能为空 mysql query INSERT INTO table Username Time Videos Credi
  • 如何将R连接到MySQL?无法连接到数据库:错误:无法加载插件 caching_sha2_password

    我最近在计算机上安装了 MySQL 并尝试将 RStudio 连接到 MySQL 我按照书上的说明以及说明进行操作here http mdsr book github io excerpts mdsr dbadmin pdf 然而 每当我使
  • 在 Toad for MySQL 中执行 SELECT 语句时出现错误

    当我尝试执行一个简单的 SELECT 语句时 出现此错误Toad MySql Data Types MySqlConversionException Unable to convert MySQL date time value to Sy
  • 如何获取与值匹配或存在于另一个表中的记录?

    我试图弄清楚在这种情况下如何获取所有任务 其中两个字段等于某个值或者它们存在于另一个表中 这是查询 SELECT TASKS task id TASKS task title TASKS task description TASKS tas
  • MySQL 导入 125000 行 CSV 的最快方法?

    这是我第一次使用 MySQL 除了对现有数据库进行一些基本查询之外 所以我不擅长解决这个问题 我有一个包含 125 000 条记录的 CSV 我想将其加载到 MySQL 中 我安装了版本 8 和工作台 我使用导入向导加载 CSV 它开始导入
  • 使用mysql在一个查询中选择多个表中的子项总数

    我整个下午都在尝试处理一个查询 或两个或三个 以获得三个表的所有子表的计数 看看我的设计 用户表 id user name 1 foo 2 bar 赢表 id won user 1 1 2 1 3 2 绘制表格 id draw user 1
  • SQL 检查一组日期是否在指定的日期范围内

    我有一个表 其中保存架构中房间不可用的日期 ROOM ID DATE UNAVAILABLE 我需要一个 sql 查询来检查两个日期范围内是否有可用房间 类似于 Select All rooms that are constantly av
  • MySQL用户创建的临时表已满

    我使用内存引擎创建了一个临时表 如下所示 CREATE TEMPORARY TABLE IF NOT EXISTS some text id INT DEFAULT 0 string varchar 400 DEFAULT engine m
  • MySQL InnoDB 查询性能

    我正在尝试优化一个简单的 sql 查询 该查询将多次运行大量数据 这是场景 MySQL 与 InnoDB 表 where 和 join 中使用的所有字段都已索引 表有 FK 我不需要查询的整个缓存 但每个表的缓存是可能的 表有更多的更新 插
  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 如何在 phpmyadmin 中创建 MySQL 触发器

    我想在 MySQL 中创建一个触发器 我运行以下命令 mysql gt delimiter mysql gt CREATE TRIGGER before insert money BEFORE INSERT ON money gt FOR
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • mysql-如何向列申请补助?

    用户名 撤销对数据库的选择 Person I set GRANT SELECT id ON database Person TO username localhost 不是工作 gt SELECT secret FROM Person Go

随机推荐

  • 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