目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

标签: TRDB (30)

数据库设计

数据库设计范式 第一范式  表中的所有字段都是不可再分的。(将复合属性进行拆分) 第二范式  表中必须存在业务主键,并且非主键依赖于全部业务主键。业务主键:那些可以唯一标识出每一行业务数据的列,或是列的组合。  如果表的业务主键只有一个列组成,那么该表原生就符合第二范式。  如果表的业务主键有多个列组成,那么需要把那些非主键依赖于全部业务主键的列从表中拆分出来。 第三范式  表中的非主键列之间不能相互依赖。 范式化设计存在的问题 如何获取出一门课程包括所有章节和小节的信息? # 表关联多,查询性能越差 1. 需要查询的信息分别位于三个不同的表。 2. 并且需要经过2个关联表。 3. 如果需要查询目标数据,就需要用到5个表。 反范式化设计  主要思路是拿空间换时间,或多或少会违反范式化的设计原则,存在一定程度上的数据冗余。 课程章节 数据结构设计流程 1. 业务分析(抽象原始数据) 2. 逻辑设计 范式化设计 反范式化设计 3. 物理设计 存储引擎 数据类型 对象命名 4. 建立库表 业务分析 课程的属性 主标题、副标题、方向、分类、难度、最新、最热、时长、简介、人数、需知、收....

日志系统:redo log、binlog

一条SQL更新语句如何执行 # 这个表有一个主键 ID 和一个整型字段 c mysql> create table T(ID int primary key, c int); # 如果要将 ID=2 这一行的值加 1,SQL 语句就会这么写 mysql> update T set c=c+1 where ID=2;   查询语句的那一套流程,更新语句也是同样会走一遍。   前面我们说过,在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句就会把表 T 上所有缓存结果都清空。   这也就是我们一般不建议使用查询缓存的原因。接下来,分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用 ID 这个索引。然后,执行器负责具体执行,找到这一行,然后更新。   与查询流程不一样的是,更新流程还涉及两个重要的日志模块:redo log(重做日志)和 binlog(归档日志)  执行器和 InnoDB 引擎在执行这个简单的 update 语句时的内部流程。 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行....

MySQL基础架构:SQL执行流程

MySQL 基本架构示意图  全局上来看,MySQL 分为 Server 层和 存储引擎层。 Server 层  涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 * 连接器 * 查询缓存 * 分析器 * 优化器 * 执行器 * 等… 存储引擎层  负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。不同的存储引擎共用一个 Server 层,也就是从连接器到执行器的部分。 * InnoDB * MyISAM * Memory * 等… 连接器  接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令一般是这么写的: mysql -h$ip -P$port -u$user -p  连接命令中的 mysql 是客户端工具,用来跟服务端建立连接。在完成经典的 TCP 握手后,连接器就要开始认证你的身份。 * 如果用户名或密码不对,你就会收到一个"Access denied for user"的错误 * 如果用户名....

数据库的备份

数据备份的意义 保护数据的安全。 在出现意外的时候(硬盘的损坏,断电,黑客的攻击),以便数据的恢复。 导出生产的数据以便研发人员或者测试人员测试学习。 高权限的人员操作失误导致数据丢失,以便恢复。 数据库的备份类型 完全备份:对整个数据库的数据进行备份。 部分备份:对部分数据进行备份(可以是一张表也可以是多张表)  增量备份:是以上一次备份为基础来备份变更数据的,节约空间。  差异备份:是以第一次完全备份的基础来备份变更备份的,浪费空间。 数据库备份的方式  逻辑备份效率低,恢复数据效率低,但是逻辑备份节约空间;物理备份浪费空间,但是相对逻辑备份而言效率比较高。 逻辑备份:直接生成 SQL 语句保存起来,在恢复数据的时候执行备份的 SQL 语句来实现数据的恢复。常见备份工具:mysqldump 物理备份:直接拷贝相关的物理数据 数据库备份的场景 热备份:备份时,数据库的读写操作不会受到影响。 温备份:备份时,数据库的读操作可以进行,但是写操作不能执行。 冷备份:备份时,不能进行任何操作。 mysqldump 数据备份(跨机器) # mysqldump使用语法 mysq....

sql语句优化思路

慢查询日志开启与问题定位 性能详情 性能线程的详细解释官方文档链接 语句优化的原则 尽量避免使用 select *from ,尽量精确到想要的结果字段。 尽量避免条件使用 or。 记得加上 limit 限制行数,避免数据量过大消耗性能。 使用模糊查询时,% 放在前面是会使索引失效。 要小心条件字段类型的转换。where 后面的条件值用尽量用' '引起来。

索引

索引   索引是一个单独的,存储在磁盘中上的数据库结构,它们包含着对数据表里的所有记录的引用指针。使用索引可以快速的找出在某列或多列中有特定值的行。 索引的优点   通过创建唯一索引,来保证数据库表中的每一行数据的唯一性。 可以加快数据的检索速度。 可以保证表数据的完整性与准确性 索引的缺点   索引需要占用物理空间。 对表中的数据进行改动时,索引也需要跟着动态维护,降低了数据的维护速度。 索引的常见类型 index:普通索引 unique:唯一索引 primary key:主键索引 foreign key:外键索引 fulltext: 全文索引 组合索引 准备数据 # 准备shell脚本 [root@localhost ~]# vim /test/test.sh #!/bin/bash echo "请输入字段servnumber的值:" read serber echo "请输入创建sql语句的数量:" read number # char=`head /dev/urandom | tr -dc 0-9 | head -c 11` for (( i=0;i<$num....

存储引擎

数据库存储引擎  数据库存储引擎是数据库底层软件组件,不同的存储引擎提供不同的存储机制,索引技巧,锁定水平等功能,使用不同的数据库引擎,可以获得特定的功能,数据库存储引擎是基于表的。 数据库引擎相关操作 # 查看当前数据库支持的引擎类型 mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | FEDERATED | NO | Federate....