数据库原理笔记

101 阅读2分钟

数据库架构与SQL执行过程

  • SQL执行过程

    • 经过四道工序:连接器、语法分析器、语义分析与优化器、执行引擎。

    • 连接器

      • 这一步既耗时又耗空间,所以需要尽量减少连接次数

      • 应用程序需要对数据库连接进行处理,主要有两方面:

        • 连接池

          • 空闲连接及时释放
        • 微服务架构

    • 语法分析器

      • 根据SQL语法规则生成对应的抽象语法树,在这一步完成语法校验,同时也是下一步语义分析与优化器处理的基础
    • 语义分析与优化器

      • 各个数据库的黑科技的部分就是在优化这一步了,语义分析与优化就是将各种复杂嵌套的SQL进行语义等价转化,得到有限几种关系代数计算结构,最后输出一个执行计划。
    • 执行引擎

      • 执行引擎是可替换的,只要能执行生成的执行计划就可以。

Statement 与 PrepareStatement

  • 在js程序访问数据库时,有两种提交SQL语句的方式,一种是通过Statement直接提交;另一种先通过PrePareStatement预编译SQL,然后设置可变参数再提交执行。

  • 在编程实践中主要使用第二种方式,原因如下:

    • 一个时PrepareStatement会预先提交带占位符的SQL到数据库进行预处理,提前生成执行计划,效率更好。
    • 另一方面,PrepareStatement可以防止SQL注入攻击。

数据库文件存储原理

  • 以MySQL为例,介绍几种数据库文件

    • 表结构文件

      • 存储数据表的框架结构,文件名与表名相同
    • 索引文件

      • 数据库索引使用B+树,减少IO次数,从而提高检索与查询速度。

      • 数据库索引分为聚簇索引和非聚簇索引。

        • MySQL的主键就是聚簇索引,主键ID和所有行记录存储在一起。MySQL的数据库文件实际上是以主键作为中间节点,行记录作为叶子节点的一棵B+树。
        • 非聚簇索引的叶子节点存储的是主键,即先通过非聚簇索引找到主键,再通过主键索引找到行记录,这个过程也叫回表。
    • 日志文件

      • 事物日志文件会记录更新前的数据记录,当某条记录更新失败,整个事物全部回滚,将已经更新的数据进行恢复。