• 事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?
    • 事务的隔离性由锁机制实现。
    • 而事务的原子性、一致性和持久性由事务的redo日志和undo日志来保证。
      • REDO LOG 称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性
      • UNDO LOG 称为回滚日志,回滚行记录到某个特定版本,用来保证事务的原子性、一致性
        Read more »

1、数据库事务概述

  • 事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。
    Read more »

1、数据库调优的措施

1.1 调优的目标

  • 尽可能节省系统资源,以便系统可以提供更大负荷的服务。(吞吐量更大)。
  • 合理的结构设计和参数调整,以提高用户操作响应的速度。(响应速度更快)
  • 减少系统的瓶颈,提高MySQL数据库整体的性能。
    Read more »

1、为什么需要数据库设计

  • 我们在设计数据表的时候,要考虑很多问题。比如:
    • 用户都需要什么数据?需要在数据表中保存哪些数据?
    • 如何保证数据表中数据的正确性,当插入、删除、更新的时候该进行怎样的约束检查
    • 如何降低数据表的数据冗余度,保证数据表不会因为用户量的增长而迅速扩张?
    • 如何让负责数据库维护的人员更方便地使用数据库?
    • 使用数据库的应用场景也各不相同,可以说针对不同的情况,设计出来的数据表可能千差万别
      Read more »

  • 都有哪些维度可以进行数据库调优?简言之:

    • 索引失效、没有充分利用到索引——索引建立。
    • 关联查询太多JOIN (设计缺陷或不得已的需求)——SQL优化。
    • 服务器调优及各个参数设置(缓冲、线程数等)———调整my.cnf。
    • 数据过多――分库分表。
  • 关于数据库调优的知识点非常分散。不同的DBMS,不同的公司,不同的职位,不同的项目遇到的问题都不尽相同。这里我们分为三个章节进行细致讲解。

    Read more »

1、数据库服务器的优化步骤

  • 当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。

  • 整个流程划分成了观察(Show status)行动(Action)两个部分。字母S的部分代表观察(会使用相应的分析工具),字母A代表的部分是行动(对应分析可以采取的行动)。

    Read more »

1、索引的声明与使用

1.1 索引的分类

  • MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
    • 功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。

    • 照物理实现方式,索引可以分为 2 种:聚簇索引和非聚簇索引。

    • 按照作用字段个数进行划分,分成单列索引和联合索引。

Read more »

1、数据库的存储结构:页

  • 索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入工作。不同存储引擎中存放的格式一般是不同的,甚至有的存储引擎比如Memory都不用磁盘来存储数据。
  • 由于InnoDB是MySQL的默认存储引擎,所以本章剖析InnoDB存储引擎的数据存储结构。
    Read more »

1、为什么使用索引

  • 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教课书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查看查询条件是否命中某条索引,符合则通过索引查找相关数据,如果不符合则需要全表扫描,即需要一条一条地查找记录,直到找到与条件符合的记录。

    Read more »

  • 为了管理方便,人们把连接管理查询缓存语法解析查询优化这些并不涉及真实数据存储的功能划分为MySQL server的功能,把真实存取数据的功能划分为存储引擎的功能。所以在MySQL server完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端就好了。
  • MySQL中提到了存储引擎的概念。简而言之,存储引擎就是指表的类型。其实存储引擎以前叫做表处理器,后来改名为存储引擎,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。
    Read more »