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