iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL分区建索引以及分区介绍总结
  • 593
分享到

MySQL分区建索引以及分区介绍总结

2024-04-02 19:04:59 593人浏览 泡泡鱼
摘要

目录Mysql 分区建索引介绍mysql 分区介绍介绍总结Mysql 分区建索引介绍 mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张独立的表,从&l

Mysql 分区建索引介绍

mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张独立的表,从“infORMation_schema.INNODB_SYS_TABLES”系统表可以看到每个分区都存在独立的TABLE_ID,由于Innodb数据和索引都是保存在".ibd"文件当中(从INNODB_SYS_INDEXES系统表中也可以得到每个索引都是对应各自的分区(primary key和unique也不例外)),所以分区表的索引也是随着各个分区单独存储。

在INNODB_SYS_INDEXES系统表中type代表索引的类型;0:一般的索引,1:(GEN_CLUST_INDEX)不存在主键索引的表,会自动生成一个6个字节的标示值,2:unique索引,3:primary索引;所以当我们在分区表中创建索引时其实也是在每个分区中创建索引,每个分区维护各自的索引(其实也就是local index);对于一般的索引(非主键或者唯一)没什么问题由于索引树中只保留了索引key和主键key(如果存在主键则是主键的key否则就是系统自动生成的6个的key)不受分区的影响;但是如果表中存在主键就不一样了,虽然在每个分区文件中都存在主键索引但是主键索引需要保证全局的唯一性就是所有分区中的主键的值都必须唯一(唯一键也是一样的道理),所以在创建分区时如果表中存在主键或者唯一键那么分区列必须包含主键或者唯一键的部分或者全部列(全部列还好理解,部分列也可以个人猜测是为了各个分区和主键建立关系),由于需要保证全局性又要保证插入数据更新数据到具体的分区所以就需要将分区和主键建立关系,由于通过一般的索引进行查找其它非索引字段需要通过主键如果主键不能保证全局唯一性的话那么就需要去每个分区查找了,这样性能可想而知。

To enforce the uniqueness we only allow mapping of each unique/primary key value to one partition.If we removed this limitation it would mean that for every insert/update we need to check in every partition to verify that it is unique. Also PK-only lookups would need to look into every partition.

索引方式:

性能依次降低

1.主键分区

主键分区即字段是主键同时也是分区字段,性能最好

2. 部分主键+分区索引

使用组合主键里面的部分字段作为分区字段,同时将分区字段建索引

3.分区索引

没有主键,只有分区字段且分区字段建索引

4.分区+分区字段没有索引

只建了分区,但是分区字段没有建索引

MySQL 分区介绍介绍

分区是指根据一定的规则将一个大表分解成多个更小的部分,这里的规则一般就是利用分区规则将表进行水平切分;逻辑上没有发生变化但实际上表已经被拆分成了多个物理对象,每个分成被划分成了一个独立的对象。相对于没有分区的当个表而言分区的表有很多的优势包括: 并发统计查询、快速归档删除分区数据、分散存储、查询性能更佳。

mysql5.7以后查询语句支持指定分区例如:“ SELECT * FROM t PARTITION (p0,p1) WHERE c < 5 ”指定分区同样适用DELETE, INSERT, REPLACE, UPDATE, and LOAD DATA, LOAD XML.

数据库版本:mysql5.7.12

是否支持分区

SHOW PLUGINS ;

查询partition的的状态是active就代表支持分区,如果是源码安装的话在编译的过程中要添加“-DWITH_PARTITION_STORAGE_ENGINE=1 \”。

注意: MERGE, CSV, or FEDERATED存储引擎不支持分区,同一个表所有的分区必须使用相同的存储引擎,不能分区1使用MYISAM分区2又使用INNODB;不同的分区表可以是不同的存储引擎。

分区介绍

目前mysql可用的分区类型主要有以下几种:

RANGE分区:基于一个给定的连续区间范围,RANGE主要是基于整数的分区,对于非整形的字段需要利用表达式将其转换成整形。

LIST分区:是基于列出的枚举值列表进行分区。

COLUMNS分区:可以无需通过表达式进行转换直接对非整形字段进行分区,同时COLUMNS分区还支持多个字段组合分区,只有RANGELIST存在COLUMNS分区,COLUMNS是RANGE和LIST分区的升级。

HASH分区:基于给定的分区个数,将数据分配到不同的分区,HASH分区只能针对整数进行HASH,对于非整形的字段只能通过表达式将其转换成整数。

KEY分区:支持除text和BLOB之外的所有数据类型的分区,key分区可以直接基于字段做分区无需转换成整数。

说明

1.注意分区名的大小写敏感问题,和关键字问题。

2.无论哪种分区类型,要么分区表中没有主键或唯一键,要么主键或唯一键包含在分区列里面,对于存在主键或者唯一键的表不能使用主键或者唯一键之外的字段作为分区字段。

3.5.7以前的版本显示分区的执行计划使用:explain PARTITIONS;5.7以后直接执行:explain

4.没有强制要求分区列非空,建议分区的列为NOT NULL的列;在RANGE 分区中如果往分区列中插入NULL值会被当作最小的值来处理,在LIST分区中NULL值必须在枚举列表中否则插入失败,在HASH/KEY分区中NULL值会被当作0来处理。

5.基于时间类型的字段的转换函数mysql提供了"YEAR(),MONTH(),DAY(),TO_DAYS(),TO_SECONDS(),WEEKDAY(),DAYOFYEAR()"

6.拆分合并分区后会导致修改的分区的统计信息失效,没有修改的分区的统计信息还在,不影响新插入的值加入到统计信息;这时需要对表执行Analyze操作.

7.针对非整形字段进行RANG\LIST分区建议使用COLUMNS分区。

删除增加分区

在每个分区内容介绍中详细介绍了每种分区的用法,但是都是介绍在创建表的时候创建分区和修改删除分区单个,也可以在一张已经存在的表中加入分区,可以一次性删除整个表的分区。

1.移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

注意:使用remove移除分区是仅仅移除分区的定义,并不会删除数据和drop PARTITION不一样,后者会连同数据一起删除

2.对已经存在记录的表创建分区,以增加range分区为例,和创建表建分区的语法一样。

ALTER TABLE `tb_partition`.`tb_varchar` 
PARTITION BY RANGE(id) PARTITIONS 3( PARTITION part0 VALUES LESS THAN (5000),  PARTITION part1 VALUES LESS THAN (10000),  PARTITION part2 VALUES LESS THAN (MAXVALUE)) ;

注意:对已有的表创建分区之后,数据会按照分区的定义分布到各个分区文件当中

分区系列文章: 

RANGE分区:https://www.jb51.net/article/244269.htm

COLUMN分区:Https://www.jb51.net/article/96515.htm

LIST分区:https://www.jb51.net/article/244256.htm

HASH分区:https://www.jb51.net/article/244277.htm

KEY分区:https://www.jb51.net/article/244282.htm

子分区:https://www.jb51.net/article/244294.htm

指定各分区路径:https://www.jb51.net/article/244296.htm

分区索引以及分区介绍总结:https://www.jb51.net/article/244300.htm

总结

到此这篇关于MySQL分区建索引以及分区介绍总结的文章就介绍到这了,更多相关MySQL分区建索引内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL分区建索引以及分区介绍总结

本文链接: https://www.lsjlt.com/news/145819.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL分区建索引以及分区介绍总结
    目录MySQL 分区建索引介绍MySQL 分区介绍介绍总结MySQL 分区建索引介绍 mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张独立的表,从&l...
    99+
    2024-04-02
  • MySQL分区介绍
    不论创建何种类型的分区,如果表中存在主键或唯一索引时,分区列必须是唯一索引的一个组成部分 mysql> create table t1(     -> col1 i...
    99+
    2024-04-02
  • mysql创建表分区详细介绍及示例
    mysql创建表分区详细介绍及示例 1. 基本概念1.1 什么是表分区?1.2 表分区与分表的区别1.3 表分区有什么好处?1.4 分区表的限制因素 2. 如何判断当前MySQL是否支持分区?3.分区类型详解3.1 MySQL支...
    99+
    2023-08-17
    mysql 数据库 java
  • MySQL怎么创建分区索引
    要在MySQL中创建分区索引,首先需要确保表已经被分区。对于已经分区的表,可以使用ALTER TABLE语句来添加分区索引。 以下是...
    99+
    2024-04-23
    mysql
  • 转:Mysql 分区 分表相关总结
    拆分策略选择 其实拆分很灵活,有的是垂直切分,将一个库拆成两个或多个,将有相关联的表放在一个库里。有的是水平切分将数据量大的表按照一定逻辑进行拆分。个人感觉垂直切分的相对来说缓解了IO的瓶颈,而水...
    99+
    2024-04-02
  • Oracle如何创建分区索引
    这篇文章主要介绍了Oracle如何创建分区索引,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 分区索引总结: 一,分区索引分为2类: 1、...
    99+
    2024-04-02
  • oracle分区表怎么建索引
    在Oracle中,可以使用以下语法来为分区表建立索引:```CREATE INDEX index_nameON table_name...
    99+
    2023-08-18
    oracle
  • mysql表分区技术详细介绍
    1、概述     数据库单表到达一定量后,性能会有衰减,像mysql\sql server等犹为明显,所以需要把这些数据进行分区处理。同时有时候可能出现数据剥离什么的,分区...
    99+
    2024-04-02
  • MySQL索引优化之分页探索详细介绍
    目录​​MySQL​​索引优化之分页探索案例一案例二​​MySQL​​索引优化之分页探索 表结构 CREATE TABLE `demo` ( `id` int(11) NOT...
    99+
    2024-04-02
  • mysql时区的缩写以及相关操作介绍
    本篇内容介绍了“mysql时区的缩写以及相关操作介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、时区...
    99+
    2024-04-02
  • mysql表的四种分区方式总结
    目录1、什么是表分区?2、表分区与分表的区别3、表分区有什么好处?4、分区表的限制因素5、如何判断当前MySQL是否支持分区? 6、MySQL支持的分区类型有哪些?6.1、...
    99+
    2024-04-02
  • MySQL事务的介绍以及示例分析
    这篇文章给大家介绍MySQL事务的介绍以及示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为...
    99+
    2024-04-02
  • MySQL索引优化的性能分析和总结
    本篇内容主要讲解“MySQL索引优化的性能分析和总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL索引优化的性能分析和总结”吧!案例分析我们先简单了解...
    99+
    2024-04-02
  • MySQL创建分区方法,及分区中常用SQL示例
    本文总结如何通过sql创建表分区,查看分区,以及日常如何使用分区表。 通过sql语句创建 mysql > CREATE TABLE `database_test`.`table_test`  (  `id` int NOT NULL AUT...
    99+
    2023-08-31
    数据库 sqlserver
  • Win7自建隐藏分区的重要性介绍
    1、分区状态该分区的格式为NTFS,没有磁盘卷标也没有分配驱动器号,其磁盘状态描述为:系统、活动、主分区。因为没有驱动器号,所以在资源管理器中是不可见的。 2、该分区中都有什么呢为了一探究竟,笔者为其分配了一个...
    99+
    2023-06-01
    Win7 隐藏分区 重要性
  • MySql的分表分库分片以及分区是怎样的
    今天就跟大家聊聊有关MySql的分表分库分片以及分区是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、前言数据库的数据量达到一定程度之后,为...
    99+
    2024-04-02
  • mongodb中索引分类是怎样的以及如何创建索引
    mongodb中索引分类是怎样的以及如何创建索引,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。学习索引分类和创建索引:   &nbs...
    99+
    2024-04-02
  • Mysql四种分区方式以及组合分区落地实现详解
    目录一、问题1.分区是什么2.Mysql为什么要使用分区3.Mysql中分区原理4.Mysql中分区局限二、分区落地实现1.Range分区2.Hash分区3.Key分区4.Mysql...
    99+
    2024-04-02
  • mysql和mssql以及oracle的分页查询方法介绍
    本篇内容介绍了“mysql和mssql以及oracle的分页查询方法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2024-04-02
  • oracle分区索引的失效和重建代码示例
    上一篇文章中我们了解了oracle普通表转化为分区表的方法的相关内容,接下来的这篇文章,我们将探讨oracle分区索引的失效和重建问题,提供了相关代码示例供大家参考,具体如下。 --创建测试表 SQL&...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作