Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1348095
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: Mysql/postgreSQL

2015-05-09 18:23:43

      在mysql cmdline中输入的SQL语句,select,update,delete,insert等操作,主要针对数据的增,删,查,改。那么从上到下,这些操作是如何实现的呢?
      数据库中的表的记录格式,不是C或者C++中的对象,内存可以随意扩充,而是表的记录是固定大小的,通过填充字节来让记录大小固定。
      查询请求,用的都是字符,mysql如何找到字符表名到表的B+树的?
           表名,以及表的列,表的索引,表的外键等,这些都是属于表的元数据信息。
           表的元数据信息都是由mysql的数据字典来管理的,如:以表名为key的哈希表,以表的ID为key的哈希表
           这些信息都是已经持久化了的,这些持久化的数据可能都是放在共享的表空间中
      
       查询请求中为什么要带索引有关的列?
          如果查询请求中字段是主键,或者是有索引字段的话,则可以加快查询的速度,如果没有索引字段,
          查询的是一些莫名的字段,则查询的时候,就要全表扫描了,不能直接过滤一些无用数据,因此在数据库表设计之时,
          就要根据查询的需要建立索引,当然不是索引越多越好,因为索引是要占磁盘空间和内存的
       插入、更新、删除记录首先要通过B+树找到记录的页节点,然后才是页内通过二分查找的方式定位具体的记录
           页节点内部的记录并不一定是顺序存储的,主要是通过磁盘指针来将记录串起来,
           记录的插入、更新、删除前,都需要提前做好undo记录和redo记录,再将数据记录从B+树页节点中添加,删除,这就可能
           需要B+树中的叶节点要分裂与合并,删除还要purge线程来最终完成
                   
       但是这个过程中有哪些数据结构,以及与磁盘怎么映射的,还需要进一步研究
阅读(1006) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~