iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql支持分区吗
  • 564
分享到

mysql支持分区吗

2024-04-02 19:04:59 564人浏览 安东尼
摘要

这篇文章主要介绍“Mysql支持分区吗”,在日常操作中,相信很多人在mysql支持分区吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql支持分区吗”的疑惑有所帮助!接

这篇文章主要介绍“Mysql支持分区吗”,在日常操作中,相信很多人在mysql支持分区吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql支持分区吗”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

mysql从5.1版本开始支持分区功能。MySQL5.1中分区表达式必须是整数,或者返回整数的表达式;而MySQL5.5中提供了非整数表达式分区的支持。MySQL数据库的分区是局部分区索引,一个分区中既存了数据,又放了索引;也就是说,每个区的聚集索引和非聚集索引都放在各自区的(不同的物理文件)。MySQL支持4种分区类型:RANGE分区,LIST分区,HASH分区,KEY分区。

教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

mysql支持分区。

mysql分区概述

MySQL在5.1时添加了对水平分区的支持。分区是将一个表或索引分解成多个更小,更可管理的部分。每个区都是独立的,可以独立处理,也可以作为一个更大对象的一部分进行处理。这个是MySQL支持的功能,业务代码无需改动。要知道MySQL是面向OLTP的数据,它不像TIDB等其他DB。那么对于分区的使用应该非常小心,如果不清楚如何使用分区可能会对性能产生负面的影响。

MySQL数据库的分区是局部分区索引,一个分区中既存了数据,又放了索引。也就是说,每个区的聚集索引和非聚集索引都放在各自区的(不同的物理文件)。目前MySQL数据库还不支持全局分区。

无论哪种类型的分区,如果表中存在主键或唯一索引时,分区列必须是唯一索引的一个组成部分。

分区表的限制因素

(1)、一个表最多只能有1024个分区。

(2)、 MySQL5.1中,分区表达式必须是整数,或者返回整数的表达式。在MySQL5.5中提供了非整数表达式分区的支持。

(3)、如果分区字段中有主键或者唯一索引的列,那么多有主键列和唯一索引列都必须包含进来。即:分区字段要么不包含主键或者索引列,要么包含全部主键和索引列。

(4)、分区表中无法使用外键约束。

(5)、MySQL的分区适用于一个表的所有数据和索引,不能只对表数据分区而不对索引分区,也不能只对索引分区而不对表分区,也不能只对表的一部分数据分区。

分区类型

目前MySQL支持一下几种类型的分区,RANGE分区,LIST分区,HASH分区,KEY分区。如果表存在主键或者唯一索引时,分区列必须是唯一索引的一个组成部分。实战十有八九都是用RANGE分区。

RANGE分区

RANGE分区是实战最常用的一种分区类型,行数据基于属于一个给定的连续区间的列值被放入分区。但是记住,当插入的数据不在一个分区中定义的值的时候,会抛异常。

RANGE分区主要用于日期列的分区,比如交易表啊,销售表啊等。可以根据年月来存放数据。如果你分区走的唯一索引中date类型的数据,那么注意了,优化器只能对YEAR(),TO_DAYS(),TO_SECONDS(),UNIX_TIMESTAMP()这类函数进行优化选择。实战中可以用int类型,那么只用存yyyyMM就好了。也不用关心函数了。

CREATE TABLE `m_test_db`.`Order` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `partition_key` INT NOT NULL,
    `amt` DECIMAL(5) NULL,
    PRIMARY KEY (`id` , `partition_key`)
) PARTITION BY RANGE (partition_key) PARTITIONS 5 (
PARTITION part0 VALUES LESS THAN (201901) , 
PARTITION part1 VALUES LESS THAN (201902) , 
PARTITION part2 VALUES LESS THAN (201903) , 
PARTITION part3 VALUES LESS THAN (201904) , 
PARTITION part4 VALUES LESS THAN (201905));

这时候我们先插入一些数据

INSERT INTO `m_test_db`.`Order` (`id`, `partition_key`, `amt`) VALUES ('1', '201901', '1000');
INSERT INTO `m_test_db`.`Order` (`id`, `partition_key`, `amt`) VALUES ('2', '201902', '800');
INSERT INTO `m_test_db`.`Order` (`id`, `partition_key`, `amt`) VALUES ('3', '201903', '1200');

现在我们查询一下,通过EXPLaiN PARTITION命令发现SQL优化器只需搜对应的区,不会搜索所有分区

mysql支持分区吗

如果sql语句有问题,那么会走所有区。会很危险。所以分区表后,select语句必须走分区键。

mysql支持分区吗

以下3种不是太常用,就一笔带过了。

LIST分区

LIST分区和RANGE分区很相似,只是分区列的值是离散的,不是连续的。LIST分区使用VALUES IN,因为每个分区的值是离散的,因此只能定义值。

HASH分区

说到哈希,那么目的很明显了,将数据均匀的分布到预先定义的各个分区中,保证每个分区的数量大致相同。

KEY分区

KEY分区和HASH分区相似,不同之处在于HASH分区使用用户定义的函数进行分区,KEY分区使用数据库提供的函数进行分区。

分区和性能

一项技术,不是用了就一定带来益处。比如显式功能比内置锁强大,你没玩好可能导致很不好的情况。分区也是一样,不是启动了分区数据库就会运行的更快,分区可能会给某些sql语句性能提高,但是分区主要用于数据库高可用性的管理。

数据库应用分为2类,一类是OLTP(在线事务处理),一类是OLAP(在线分析处理)。对于OLAP应用分区的确可以很好的提高查询性能,因为一般分析都需要返回大量的数据,如果按时间分区,比如一个月用户行为等数据,则只需扫描响应的分区即可。在OLTP应用中,分区更加要小心,通常不会获取一张大表的10%的数据,大部分是通过索引返回几条数据即可。

比如一张表1000w数据量,如果一句select语句走辅助索引,但是没有走分区键。那么结果会很尴尬。如果1000w的B+树的高度是3,现在有10个分区。那么不是要(3+3)*10次的逻辑IO?(3次聚集索引,3次辅助索引,10个分区)。所以在OLTP应用中请小心使用分区表。

在日常开发中,如果想查看sql语句的分区查询结果可以使用explain partitions + select sql来获取,partitions标识走了哪几个分区。

mysql> explain partitions select * from TxnList where startTime>'2016-08-25 00:00:00' and startTime<'2016-08-25 23:59:00';  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
| id | select_type | table             | partitions | type | possible_keys | key  | key_len | ref  | rows  | Extra       |  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
|  1 | SIMPLE      | ClientActionTrack | p20160825  | ALL  | NULL          | NULL | NULL    | NULL | 33868 | Using where |  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
1 row in set (0.00 sec)

注:

1.MySQL Workbench下添加分区的截图

mysql支持分区吗

2. Table has no partition for value 12

在12月的某一天,我查看了生产的日志文件,忽然发现系统一直在报错:Table has no partition for value 12。仔细检查分区sql发现分区的时候用的是less than

mysql支持分区吗

也就是说我在注释1截图里面的分区是不包括12月的区的。执行以下命令增加分区:

ALTER TABLE table_name ADD PARTITION (PARTITION p_12 VALUES LESS THAN (13));

如果没有进行适当的处理,将会报错。所以在进行 RANGE 分区时,要思考这种情况。一般情况下,就时在最后添加一个 MAXVALUE 分区,如下:

PARTITION p_max VALUES LESS THAN MAXVALUE

到此,关于“mysql支持分区吗”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: mysql支持分区吗

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

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

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

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

下载Word文档
猜你喜欢
  • mysql支持分区吗
    这篇文章主要介绍“mysql支持分区吗”,在日常操作中,相信很多人在mysql支持分区吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql支持分区吗”的疑惑有所帮助!接...
    99+
    2024-04-02
  • PHP支持MySQL吗
    这篇文章主要讲解了“PHP支持MySQL吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP支持MySQL吗”吧!PHP支持MySQL;MySQL是与PHP搭配使用最多的数据库,它们常被称...
    99+
    2023-07-02
  • mysql支持外键吗
    本篇内容主要讲解“mysql支持外键吗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql支持外键吗”吧! mysql支持外键。...
    99+
    2024-04-02
  • mysql支持子查询吗
    这篇文章主要介绍了mysql支持子查询吗的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql支持子查询吗文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • mysql查看是否支持分区的方法
    小编给大家分享一下mysql查看是否支持分区的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql查看是否支持分区的方法...
    99+
    2024-04-02
  • Amazon Aurora支持跨区域复制吗
    是的,Amazon Aurora支持跨区域复制。您可以在不同AWS区域之间设置跨区域复制,以实现数据的异地备份和容灾恢复。通过跨区域...
    99+
    2024-04-09
    Amazon
  • Keras支持分布式训练吗
    是的,Keras可以支持分布式训练。Keras提供了多种分布式训练的解决方案,例如使用TensorFlow的分布式训练策略(tf.d...
    99+
    2024-03-07
    Keras
  • Mysql直接支持序运算吗
    本篇内容主要讲解“Mysql直接支持序运算吗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql直接支持序运算吗”吧!MySQL 不直接支持序运算 ,写这些...
    99+
    2024-04-02
  • Amazon Aurora支持读写分离吗
    是的,Amazon Aurora支持读写分离。通过读写分离,您可以将读取请求路由到只读实例,从而分担主数据库实例的负载,并提高系统的...
    99+
    2024-04-09
    Amazon
  • Teradata支持分布式计算吗
    是的,Teradata支持分布式计算。Teradata是一种关系型数据库管理系统,具有强大的并行处理和分布式计算能力。它可以在多个节...
    99+
    2024-04-09
    Teradata
  • safari支持html5吗
    本教程操作环境:Windows10系统、HTML5版、DELL G3电脑safari支持html5吗?safari默认是支持html5的。如果你是用户,直接就可以访问html5标准制作的页面,如果是开发者,那么直接就可以使用html5标签。...
    99+
    2023-05-14
    html5 safari
  • ie9支持css3吗
    本篇内容主要讲解“ie9支持css3吗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ie9支持css3吗”吧! IE9支持css3;...
    99+
    2024-04-02
  • hbuilder支持es6吗
    这篇文章主要介绍“hbuilder支持es6吗”,在日常操作中,相信很多人在hbuilder支持es6吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”hbuilder支持es6吗”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-04
  • thinkpad支持win11吗
    这篇文章主要讲解了“thinkpad支持win11吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“thinkpad支持win11吗”吧!thinkpad支持win11吗:答:在售的Think...
    99+
    2023-07-01
  • 阿里云服务器支持分区
    简介 阿里云服务器(ECS)是一种弹性计算服务,可以为用户提供灵活可靠的云计算资源。在使用阿里云服务器时,用户可以根据自己的需求对服务器进行分区,以提高性能和管理效率。本文将介绍阿里云服务器支持的分区功能,并举例说明其应用场景。分区功能阿里...
    99+
    2024-01-17
    阿里 分区 服务器
  • golang支持arm吗
    在当今的计算机技术领域,越来越多的科学技术工作者开始寻找开发语言,以满足不同的需求。对于使用ARM处理器的开发者来说,Golang是否支持ARM成为一个重要的问题。在此篇文章中,我们将探讨Golang对ARM处理器支持的情况,以及如何在AR...
    99+
    2023-05-14
  • ie8支持html5吗
    本教程操作环境:Windows10系统、HTML5版、Dell G3电脑。ie8支持html5吗不支持。但是让IE(ie6/ie7/ie8)支持HTML5元素,我们可以在HTML头部添加以下JavaScript,这是一个简单的documen...
    99+
    2023-05-14
    ie8 html5
  • ie8支持es6吗
    这篇“ie8支持es6吗”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ie8支持es6吗”...
    99+
    2024-04-02
  • kangle支持PHP吗
    这篇文章主要讲解了“kangle支持PHP吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“kangle支持PHP吗”吧!kangle支持PHP;kangle是一款跨平台、功能强大、安全稳定、...
    99+
    2023-07-05
  • pycharm支持win7吗
    是的,pycharm 支持 windows 7。该 ide 可适用于 windows 10、windows 8.1 和 windows 7 等多种操作系统。 PyCharm 是否支持 ...
    99+
    2024-04-25
    linux python macos pycharm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作