位置: 编程技术 - 正文

MySQL优化之分区表(mysql分区表优劣分析)

编辑:rootadmin

推荐整理分享MySQL优化之分区表(mysql分区表优劣分析),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql分区表优劣分析,mysql分区表的坑,mysql分区表优劣分析,mysql 分区,mysql分区实战,mysql分区的好处,mysql分区语句,mysql优化分区的作用是什么,内容如对您有帮助,希望把文章链接给更多的朋友!

当数据库数据量涨到一定数量时,性能就成为我们不能不关注的问题,如何优化呢? 常用的方式不外乎那么几种:

  1、分表,即把一个很大的表达数据分到几个表中,这样每个表数据都不多。

    优点:提高并发量,减小锁的粒度    缺点:代码维护成本高,相关sql都需要改动

  2、分区,所有的数据还在一个表中,但物理存储数据根据一定的规则存放在不同的文件中,文件也可以放到另外磁盘上

    优点:代码维护量小,基本不用改动,提高IO吞吐量    缺点:表的并发程度没有增加

  3、拆分业务,这个本质还是分表。

    优点:长期支持更好    缺点:代码逻辑重构,工作量很大

  当然,每种情况都有合适的应用场景,需要根据具体业务具体选择。由于分表和拆分业务和mysql本身关系不大属于业务层面,我们只说和数据库关系最紧密的方式:表分区。不过使用表分区有个前提就是你的数据库必须支持。那么,怎么知道我的数据库是否支持表分区呢 ? 请执行下面命令  

据说5.4一下的版本是另外一个命令,不过我没有测试   数据库的表分区一般有两种方式:纵向和横向。纵向就是把表中不同字段分到不同数据文件中。横向是把表中前一部分数据放到一个文件中,另一部分数据放到一个文件中。mysql只支持后后一种方式,横向拆分。

1、创建分区表

  如果要使用表的分区优势,不但要数据库版本支持分区,关键要建分区表,这个表和普通表不一样,并且必须建表的时候就要指定分区,否则无法把普通表改成分区表。那么,如果创建一个分区表呢? 其他很简单,请看下面建表语句

上面语句建了一个“T_part”表,有两个字段f_id和f_name,并且根据RANGE方式把表分成两个区p0、p1,当f_id小于放入p0分区,当f_id大于0小于放入分区p1. 那么当f_id大于的数据放入哪个分区呢? 你猜对了,insert语句会报错。

  看到了吧,创建分区表就这么简单!当然,你随时可以添加删除分区,不过要注意,删除分区的时候会把当前分区下所有数据都删除。

2、表分区的几种方式   mysql支持5种分区方式:RANGE分区、LIST分区、HASH分区、LINEAR HASH分区和KEY分区。每种分区都有自己的使用场景。

MySQL优化之分区表(mysql分区表优劣分析)

  1)RANGE分区:

    RANGE分区的表是通过如下一种方式进行分区的,每个分区包含那些分区表达式的值位于一个给定的连续区间内的行。这些区间要连续且不能相互重叠,使用VALUES LESS THAN操作符来进行定义。

    上面的例子就是RANGE分区.

  2)LIST分区:

    MySQL中的LIST分区在很多方面类似于RANGE分区。和按照RANGE分区一样,每个分区必须明确定义。它们的主要区别在于,LIST分区中每个分区的定义和选择是基于某列的值从属于一个值列表集中的一个值,而RANGE分区是从属于一个连续区间值的集合。LIST分区通过使用“PARTITION BY LIST(expr)”来实现,其中“expr” 是某列值或一个基于某个列值、并返回一个整数值的表达式,然后通过“VALUES IN (value_list)”的方式来定义每个分区,其中“value_list”是一个通过逗号分隔的整数列表。

3)HASH分区:

    HASH分区主要用来确保数据在预先确定数目的分区中平均分布。在RANGE和LIST分区中,必须明确指定一个给定的列值或列值集合应该保存在哪个分区中;而在HASH分区中,MySQL 自动完成这些工作,你所要做的只是基于将要被哈希的列值指定一个列值或表达式,以及指定被分区的表将要被分割成的分区数量。要使用HASH分区来分割一个表,要在CREATE TABLE 语句上添加一个“PARTITION BY HASH (expr)”子句,其中“expr”是一个返回一个整数的表达式。它可以仅仅是字段类型为MySQL 整型的一列的名字。此外,你很可能需要在后面再添加一个“PARTITIONS num”子句,其中num 是一个非负的整数,它表示表将要被分割成分区的数量。

“expr”还可以是MySQL 中有效的任何函数或其他表达式,只要它们返回一个既非常数、也非随机数的整数。(换句话说,它既是变化的但又是确定的)。但是应当记住,每当插入或更新(或者可能删除)一行,这个表达式都要计算一次;这意味着非常复杂的表达式可能会引起性能问题,尤其是在执行同时影响大量行的运算(例如批量插入)的时候。最有效率的哈希函数是只对单个表列进行计算,并且它的值随列值进行一致地增大或减小,因为这考虑了在分区范围上的“修剪”。也就是说,表达式值和它所基于的列的值变化越接近,MySQL就可以越有效地使用该表达式来进行HASH分区。

  4)LINEAR HASH分区:

    MySQL还支持线性哈希功能,它与常规哈希的区别在于,线性哈希功能使用的一个线性的2的幂(powers-oftwo)运算法则,而常规 哈希使用的是求哈希函数值的模数。线性哈希分区和常规哈希分区在语法上的唯一区别在于,在“PARTITION BY” 子句中添加“LINEAR”关键字.

  5)KEY分区:

    按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用户定义的表达式,而KEY分区的 哈希函数是由MySQL 服务器提供。MySQL 簇(Cluster)使用函数MD5()来实现KEY分区;对于使用其他存储引擎的表,服务器使用其自己内部的 哈希函数,这些函数是基于与PASSWORD()一样的运算法则。

    KEY分区的语法和HASH语法类似,只是把关键字改成KEY。  

6)子分区:

    子分区的意思就是在分区的基础上再次分区。且每个分区必须有相同个数的子分区。

上面语句的意思是,建立两个range分区,每个分区根据hash有分别有两个子分区,实际上整个表分成2×2=4个分区。当然,要详细定义每个分区属性也是可以的

这样可以对每个分区指定具体存储磁盘。前提磁盘是存在的。  

  MySQL 中的分区在禁止空值(NULL)上没有进行处理,无论它是一个列值还是一个用户定义表达式的值。一般而言,在这种情况下MySQL 把NULL视为0。如果你希望回避这种做法,你应该在设计表时不允许空值;最可能的方法是,通过声明列“NOT NULL”来实现这一点。

MySQL插入中文不乱码的5种方法 方法一:登录MySQL,先做setnameslatin1,然后在更新语句或者执行SQL语句mysqlsetnameslatin1;mysqlsourcetest.sql;方法二:在SQL文件中指定setnameslatin1;然后登录MySQL,执

PhpMyAdmin 配置文件现在需要一个短语密码的解决方法 新版本的PhpMyAdmin增强了安全性,需要在配置文件设置一个短语密码。否则进入之后会有配置文件现在需要一个短语密码。的红色警叹提示。解决方法:1

分页技术原理与实现之分页的意义及方法(一) 什么是分页技术分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自习自己想要的内

标签: mysql分区表优劣分析

本文链接地址:https://www.jiuchutong.com/biancheng/347565.html 转载请保留说明!

上一篇:MySQL绿色版(zip解压版)的安装图文教程(mysql-5.6.22-win32.zip)(mysql绿色版和安装版有什么区别)

下一篇:MySQL插入中文不乱码的5种方法(mysql不能写入中文)

  • 印花税入什么科目核算成本
  • 出口免税进项税额转出怎么计算
  • 外资企业法最新
  • 企业缴纳季度所得税
  • 招标押金如何做账务处理?
  • 银行贷款第三方收款人
  • 所得税的账务处理流程
  • 核定征收企业需要做账吗
  • 会计净额法和总额法
  • 收到去年的成本发票
  • 非同一控制下企业合并对价小于可辨认
  • 收购烟叶委托加工烟丝组成计税价格
  • 企业增值税留抵退税新闻稿范文
  • 退货后发票还能拿去抵税吗
  • 当地预缴2%什么时候缴纳
  • 建筑企业小规模纳税标准
  • 小规模纳税人未开票收入如何做账
  • 小型微利企业所得税优惠政策
  • 税控盘抵增值税表怎么填
  • 分支机构分配表 资产总额无法区分怎么办
  • 药品增值税简易征收
  • 一般纳税人销售自己使用过的物品
  • 税务局减免的税金会计分录
  • 待摊费用在资产负债表中怎么填
  • 商业企业向供货方收取的返还收入
  • 应收票据的核算内容及其贴现
  • 资本公积有哪些科目
  • 线上生活服务app有哪些
  • 申请专利的顺序
  • 被投资企业所在地什么意思
  • 电脑cpu风扇不动怎么办
  • thinkphp添加数据
  • wordpress网站打开很慢
  • 税款差0.05是怎么处理
  • css文字显示一行
  • php获取年月日
  • php怎么建立数据库mysql
  • 【原创】基于JavaWeb的医院预约挂号系统(医院挂号管理系统毕业设计)
  • 会计利润表计算公式
  • 土建工程怎么入账
  • 土地使用权的使用方式
  • 织梦cms要钱吗
  • 一般纳税人申报表电子版
  • 新办企业装修会计分录
  • 个人所得的账务处理分录
  • 接受银行承兑汇票需要开通吗
  • 个人接私活需要什么条件
  • 其他应付款付不出去怎么处理好
  • 先预付货款,货到了怎么做账
  • 公对公退款是不是很麻烦
  • 委托代销受托方会计分录
  • 借别人账户过钱
  • 股东撤资如何退还资金,用途写什么
  • 计提员工工资是什么意思
  • 怎么查对方是一般还是小规模
  • 微信转账报销怎么退回
  • mysqldump -s
  • mysql的日志
  • 安装sqlserver2016步骤
  • vista win
  • Mail.app增强插件:Universal Mailer介绍
  • 重装系统重启后怎么操作
  • 组装机没有装系统开机会怎么样
  • win7系统玩英雄联盟黑屏怎么办
  • win7系统无法打开任务管理器
  • msdev.exe是什么
  • win10一直显示正在启动
  • win7 64位系统重装后无线信号找不到的原因分析以及解决方法
  • linux虚拟空间
  • win8怎么看windows
  • java 迭代器 remove
  • 爬虫 python
  • bootstrap3中container与container_fluid外层容器的区别讲解
  • css中文字垂直排列
  • 如何使用form表单
  • ca证书怎么下载安装
  • 广西电子税务局手机版
  • 香港居民个人转让境内股权所得个人所得税税率
  • 珠海市香洲区有火车站吗
  • 沈阳市地方税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设