Mysql——高级特性

分区表

对用户来说分区表是一个独立的逻辑表,但是底层是多个物理字表组成的,实现分区的代码实际上是对一组底层表的引用的封装。MySQL实现分区表的方式——对底层表封装,因而没有全局索引,分区可以将相关数据存放在一起,如果 一次性批量删除会变得简单。
应用场景:

  • 表很大无法全部放到内存中,或者只有部分热点数据,其他事历史数据。
  • 分区操作,更容易维护,如可以清除整个分区。
  • 数据分布在不同物理设备,高效利用。
  • 避免特殊的瓶颈,如InnoDB的单索引互斥访问
  • 可以备份和恢复独立的分区。
    缺陷:
  • 一个表最多只能有1024个分区。
  • 无法使用外键,主键和唯一索引列必须包含进来。
  • 分区表达式必须是整数,或者返回整数的表达式
    操作原理:
    当需要执行增删改查的时候,分区层先打开并锁住所有的底层表,确定分区,执行操作。
    MySQL支持多种分区,最多的是根据范围分区,即每个分区存储落在某个范围的记录。

需求:从一个非常大的表中查询出一段时间的记录,而表包含很多年的历史数据,数据按照时间排序。
因为数据量巨大,不可能每次查询扫描全表,因为索引在空间和维护上的消耗,不希望使用索引,即便使用也会产生成千上万的随机I/O,程序便会僵死,也就是说B-Tree索引起不到作用。为了保证大数据量的可扩展性的策略:

  • 使用简单的分区方式存放表,不要任何索引,根据分区的规则大致定位需要的数据位置,使用where条件将数据限制在少数分区中,提高效率。
  • 数据热点分区,使用索引。如果数据有明显的热点,那么将这部分单独作为一个分区,并且有机会缓存在内存中。
    注意事项
  • NULL值会使分区过滤无效—可以直接使用列本身而不是基于列的函数进行分区;
  • 分区列和索引列不匹配—如a列上的索引,却根据b列分区
  • 开销大,打开并锁住所有底层表

视图

视图本身是一个虚拟表,数据是从其他表中生成的,甚至可以在视图上在定义一个视图
创建视图:

create view test-view as
select * from tab 
with check option

直接使用:

select * from test-view

算法实现,
MySQL使用两种算法:合并算法(merge)临时表算法(temptable),

内部存储代码

  • 触发器
  • 存储过程
  • 函数
  • 事件
  • 游标

    字符集和校对
    全文索引
    查询缓存

优化服务器配置

  • 配置文件
    一般是/etc/my.cnf或/etc/mysql/my.cnf,会分成多个部分,每个部分的名称开头用方括号,服务器通常读取mysql这一段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值