文章目录

  • 一、定义
  • 二、分区表的原理
  • 三、分区表的类型
  • 四、分区表的使用策略
  • 五、索引
    • 1.建立索引的三种数据结构
    • 2.InnoDB的索引模型
    • 3.覆盖索引
    • 4.InnoDB索引和MyISAM索引的区别
    • 5. InnoDB与MyISAM的区别

一、定义

简而言之就是将一张逻辑上仍然完整的表,在物理存储的过程中,将表上的数据按某种指定的划分依据,在物理上存放到多个“表空间”(物理文件上),这样查询数据时,不至于每次都扫描整张表而只是从当前的分区查到所要的数据,这样大大提高了数据查询的速度。
优点:

  • 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度;
  • 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
  • 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
  • 均衡I/O:可以把不同的分区映射到不同磁盘以平衡I/O,改善整个系统性能。

缺点:

  • 已经存在的表没有方法可以直接转化为分区表,总之,利大于弊
  • 一个表最多只能有1024个分区
  • 分区表中无法使用外键约束
  • 各个底层表必须使用相同的存储引擎

二、分区表的原理

其实对存储引擎来说,底层表和普通表来说是没有什么区别的,这就像对CPU而言其实本质上所有的物理内存都是拥有同等地位的,只不过由于人为的设定才有了内核态与用户态一样,那么存储引擎会为每一个底层表都设置相同的索引,这样就可以实现快速定位与简单的优化过滤了。

  • 对于select,分区层会先打开并锁住所有底层表(对InnoDB来说可以只使用行锁),然后优化器会先判断过滤部分分区,然会调用存储引擎的接口开始访问数据
  • 对于insert,分区层会先打开并锁住所有底层表,然后确定对应分区将数据写入对应底层表
  • 对于delete,分区层会先打开并锁住所有底层表,然后确定对应分区将数据从对应底层表删除
  • 对于update,分区层会先打开并锁住所有底层表,然后确定对应分区将数据从对应底层表拿出,更新数据之后再来判断要插入那个分区,最后对底层表进行写入操作,然后将原数据从对应底层表删除

三、分区表的类型

通常是根据某一列的数据范围进行划分。
创建分区表要在使用create table命令时配合partition子句进行划分,需要注意的是partition子句使用的表达式的返回值要是一个确定的整数,且不能是一个常数。如假如使用日期进行分区我们就要使用year()或to_days()来进行处理得到一个具体的整数。

四、分区表的使用策略

  • 全量扫描数据,不为分区表建立索引
  • 索引数据,并分离热点
    第一点好理解,第二点其实就是指将会经常访问的数据分离出来,又可能的话就把这部分数据缓存到内存里面,这样查询的时候就可以只访问很小的一部分分区表了。需要注意的是这两点都是基于查询可以进行过滤而且分区不会造成额外代价这两点假设而言的,自然就会存在一些问题,进而导致遇到下面几个问题:
  • NULL值使得分区过滤无效
  • 分区列和索引列不匹配
  • 寻找查询对象时正确选择分区可能开销很大
  • 打开并锁住所有底层表的差别可能很高
  • 维护分区的成本可能很高

五、索引

1.建立索引的三种数据结构
  • 哈希索引
    对于key值相同的索引,哈希索引默认采用拉链法解决hash冲突。缺点是对于区间查询比较慢,需要逐项查找,所以这种索引结构只适合于等值查询的场景。
  • 有序数组索引
    此索引可以解决上面等值查询的问题,但是它不适合进行插入和删除操作,所以这对于数据库来说是不可忍受的,故它只能作用于静态存储引擎,负责索引不会发生变化的数据。
  • 多路搜索树
    为什么不使用二叉搜索树?
    因为索引也是文件,我们要把他放在磁盘上,对于二叉树我们都知道查找效率大约为O(logN),,其实就是树高,在使用机械硬盘进行数据读写时,一次IO可能就需要10ms,若树高为20,那可能查找到一个索引就需要200ms,这是不可接受的,但多路搜索树就不一样了,InnoDB使用的是1200叉树,只需要四层高的树就可以访问12003(约17亿)个值了,这样磁盘IO时间会极少。
2.InnoDB的索引模型

使用B+树索引模型,根据主键或者非主键建立的索引其查找复杂度不同。使用主键建立的索引我们叫做聚簇索引,使用非主键建立的索引叫做二次索引。之所以说二次索引不推荐使用就是因为其会先找到主键,然后依据主键索引继续查找,平白做了一点儿无用事。

3.覆盖索引

在使用非主键索引k查询结果时,若发现查询结果已经在K索引树上了的话就不需要去主键索引树上去查找了,即这个普通索引k索引树覆盖了我们的查询需求,所以称之为覆盖索引。
使用覆盖索引减少了树的搜索次数,显著提升了查询性能,所以使用覆盖索引是一个常用的性能优化手段。

4.InnoDB索引和MyISAM索引的区别
  • 一是主索引的区别,InnoDB的数据文件本身就是索引文件。而MyISAM的索引和数据是分开的。
  • 二是辅助索引的区别:InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别
5. InnoDB与MyISAM的区别
  • 使用索引结构的差别
  • 对事务的支持不同
  • 锁的粒度不同
  • 对于全文检索的支持不同
  • 效率不同,MyISAM的效率要高一点
  • MyISAM不支持外键,而 InnoDB是唯一支持外键的MySQL引擎
    关键字:索引,锁粒度,事务,外键,效率

[推荐阅读]:
mysql数据库面试总结
常见面试题整理–数据库篇(每位开发者必备)
如何理解关系型数据库的常见设计范式?

MySQL分区表与索引相关推荐

  1. mysql 分区索引失效_数据库分区表全局索引失效故障

    现场实施反馈一个分区表的几个全局索引老是失效. 通过视图v$sql, v$sqlarea等视图查看,对这张分区表执行过的操作有drop partition和truncate partition操作,但 ...

  2. MySql分区表性能测试及切换案例

    背景 互联网公司的业务变化很快,数据库表结构设计相对比较直接,很少会在前期设计的很完善.当业务存活并发展起来后,就需要在扩展性.安全性等方面进行改进. 比如,我们一张记录用户状态的表,存储在RDS f ...

  3. mysql单表索引个数_MySQL性能:多个表与单个表和分区上的索引

    小编典典 创建20,000个表是一个坏主意.您很快将需要40,000个表,然后更多. 我在<SQL反模式>一书中将此综合症称为 Metadata Tribbles .您每次计划创建&quo ...

  4. mysql 重置表索引_MySQL如何进行索引重建操作?

    在MySQL数据库中,没有类似于SQL Server数据库或Oracle数据库中索引重建的语法(ALTER INDEX ... REBUILD),那么在MySQL数据库中,是否有什么方式重建索引呢? ...

  5. Mysql分区表的使用

    简单来说,分区表就是把物理表结构相同的几张表,通过一定算法,组成一张逻辑大表.这种算法叫"分区函数",当前 MySQL 数据库支持的分区函数类型有 RANGE.LIST.HASH. ...

  6. 简述MySQL分区表类型

    分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表.我们在此之前已经讲过MySQL分区表的原理,分区有利于管理非常大的表,它采用分而治之的逻 ...

  7. Mysql分区表概述、分区类型、分区管理

    另有一篇简单易懂的好文章帮助学习 Mysql分区表的原理和优缺点以及注意点 一.分区概述 分区是指根据一定的规则,数据库把一个表分解成多个更小的.更容易管理的部分.分区有利于管理非常大的表. MySQ ...

  8. mysql 派生表 索引_MySQL 索引初探

    MYSQL索引 什么是索引 为什么要建立索引 索引的优缺点和使用原则 索引的分类 单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引. 普通索引:MySQL中基本索引类型,没有什么限制,允许 ...

  9. mysql表分区数量限制_详解MySQL分区表的局限和限制的代码实例

    本文对Mysql分区表的局限性做了一些总结,因为个人能力以及测试环境的 原因,有可能有错误的地方,还请大家看到能及时指出,当然有兴趣的朋友可以去官方网站查阅. 禁止构建 分区表达式不支持以下几种构建: ...

最新文章

  1. Java与C++的几个显著不同
  2. css js html记录
  3. mysql locking_Mysql next-key locking,读锁,写锁
  4. RxSwift之深入解析map操作符的底层实现
  5. 8 无法识别raid盘_王者荣耀防沉迷规则再升级;未来将采用人脸识别验证
  6. 灵魂一问-如何彻底防止APK反编译?成功定级腾讯T3-2
  7. 【EF学习笔记07】----------加载关联表的数据 贪婪加载
  8. 阿里年薪80w数据总监分享:一张图了解数据分析完整流程
  9. [leetcode双周赛]5311. 将数字变成 0 的操作次数
  10. 神经网络动态可视化工具
  11. qt和arcgis for qt在地图上做测距(画线和显示距离,单位km)
  12. 【STM32H7的DSP教程】第17章 DSP功能函数-定点数互转
  13. [单片机框架][bsp层][cx32l003][bsp_system_clock] clock配置和使用
  14. stm32F107VC通过模拟SPI方式读取LIS3DH三轴加速度传感器数据
  15. 生活中的小技巧-2:洗衣机洗衣服打结缠绕,该如何解决?学上几个实用招数
  16. 最全Python函数总结和应用(超详细+建议收藏),基本所有内置函数,心得都在这了,踩的坑也在里面了,最后还有函数的魂
  17. pv是什么意思?什么是pv值,pv访问量?网站pv是什么?
  18. 四:ShardingProxy分库分表实战及同类产品选型对比
  19. http报文在各层的长度分析-wireshark报文实战
  20. python3 def download_python3下载抖音视频的完整代码

热门文章

  1. 时间序列分析(12)| 脉冲响应函数、格兰杰因果检验
  2. Xbox One手柄 + Xbox Wireless Adapter PC无线适配器驱动安装、配对全流程
  3. 地铁站台的数字孪生,闸口、安检机、售票机逼真展示
  4. Apache扩展GeoIP
  5. 在 Debian 上将 aria2c 封装为服务的方法及遇到的踩坑点
  6. Propargyl-PEG1-SS-PEG1-PFP ester,1817735-30-0,炔基应用于生物标记
  7. Highcharts如何去掉水印
  8. 博图15.0的wincc流水动画VB脚本
  9. 计算机网络与通信缩读,网络课件子讲稿规范.ppt
  10. 看红火的移动电竞市场逐渐走向成熟