码迷,mamicode.com
首页 > 数据库 > 详细

mysql的高级特性

时间:2018-10-13 10:26:03      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:分享图片   union   也会   range   img   返回   相对   type   事件   

1、分区表
  1)分区表是一个独立的逻辑表,底层是由多个物理字表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装,对分区表的请求都会通过句柄对象转化为对存储引擎的接口调用,所以分区对于SQL层来说是一个完全封装底层实现的黑盒子,对应用是透明的。
  2)Mysql实现分区后,索引是按照分区的字表来定义的,没有全局的索引。
  3)注意几点:
    - 一个表最多只能由1024个分区;
    - Mysql5.1中分区的表达式必须是整数或者返回值为整数,在Mysql5.5中可以直接使用列来尽心个分区;
    - 如果分区字段中由主键或者唯一索引的列,那么所有主键和唯一索引列都必须包含进来。
    - 分区表中无法使用外键约束。
  4)第一个分区是特殊分区,在分区的表达 PARTITION BY RANGE (to_days(var)) 中var的值为null或者非法值时,记录都会存放在第一个分区,为了避免第一个分区太大导致检索效果很差,一般第一个分区可以设置PARTITION BY RANGE (to_days(0)),如果var的值都是有效的,第一个分区就是空,即使无效第一个分区的数据量也会很小。
 
2、视图
  Mysql 5.0版本后才开始引入视图。视图本身是一个虚拟表不存放任何数据。在使用SQL语句访问视图的时候返回的是Mysql从其他表中生成的,视图和表是在一个命名空间,不同对视图创建触发器也不能使用DROP TABLE命令删除视图。
创建一个视图:

技术分享图片

  视图有两种实现:合并算法和临时表算法,如果可能会尽可能使用合并算法,只有在视图中包含GROUP BY、DISTINCT、聚合函数、UNION、子查询等,无法在原纪录和视图建立一一映射的场景中,Mysql都会使用临时表来实现视图,也可以使用EXPLAIN对视图确定是用哪种实现方法。
技术分享图片
这里的select_type为“DERVIED”表明该视图采用的是临时表算法实现的。对于使用了临时表算法的视图无法更新数据的。
  
下图是两种表的实现算法:
技术分享图片
 
3、Mysql内部存储代码
  Mysql允许通过触发器、存储过程和函数的形式来存储代码。从Mysql5.1开始可以在定时任务中存放代码,这个定时任务也称为“事件”。
  存储过程:
    - 每个连接都有独立的存储过程的执行计划缓存
    - 存储程序越小越简单越好,更复杂的逻辑还需要交给上层的应用实现。
    - 使用存储过程对于一些小的查询或者插入操作优势很明显,相对于应用层面减少执行成本、解析和网络开销,所以一般对于测试环境造大量数据可以考虑存储过程来实现。
 
 
 

 

mysql的高级特性

标签:分享图片   union   也会   range   img   返回   相对   type   事件   

原文地址:https://www.cnblogs.com/kma-3/p/9781796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!