数据库

209 阅读5分钟

SQL

连接查询与子查询的比较

1. 连接查询的优点是可以用尽可能少的SQL进行查询,简化了应用和数据库之间的IO调用;缺点是如果表设计不好,会造成数据库大量的内部IO操作,特别是大量没必要的全表扫描。

    使用场景:要么是确实要读取的数据量非常大,要么是能够通过索引等方式控制住全表扫描的数量

2. 子查询的缺点是应用和数据库之间的IO调用比较多,损耗了数据库的带宽;优点是对原来的被驱动表来说数据是明确的,可以通过大量的索引,特别是主键索引避免全表扫描

drop、delete、truncate比较

  • 区别
    1. delete和truncate只删除表的数据不删除表结构

    2. 速度:drop>truncate>delete

    3. delete语句是dml,这个操作放到rollback segement中,事务提交之后才生效

    4. delete如果有相应的触发器,执行的时候将被触发。truncate,drop是ddl,操作立即生效,原数据不放到rollback segment中,不能回滚,操作不触发触发器。

  • 使用场景:
    1. 不再需要一张表时候,用drop

    2. 想删除部分数据行,用delete带上where子句

    3. 保留表而删除所有数据时候用truncate

DML和DDL的含义

1. DML(Data Manipulation Language) 数据操作语言,数据库基本操作,如(CRUD)
2. DDL(Data Manipulation Language) 数据定义语言,用于定义和管理SQL数据库中的所有对象的语言

DML与DDL的区别

1. DML操作是可以手动控制事务的开启、提交和回滚的
2. DDL操作是隐性提交的,不能roolback

视图的作用,何时能更新视图

1. 视图可以定制用户数据,聚焦特定的数据
2. 视图可以简化数据操作
3. 使用视图,基表中的数据就有了一定的安全性
4. 可以合并分离的数据,创建分区视图

一般基本基表更新了,视图也会跟着更新

系统原理

ACID的作用以及实现原理

A  原子性(Atomicity)
事务必须被视为不可分割的最小工作单元,整个事务的所有操作要么全部提交成功,要么全部失败回滚。

回滚可以用回滚日志(Undo Log)来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。

B  一致性(Consistency)
数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。

C  隔离性(Isolation)
一个事务所做的修改在最终提交以前,对其它事务是不可见的。

D 持久性(Durability)
一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不会丢失。

系统发生奔溃可以用重做日志(Redo Log)进行恢复,从而实现持久性。与回滚日志记录数据的逻辑修改不同,重做日志记录的是数据页的物理修改

四大隔离级别

READ UNCOMMITTED(未提交读)
    事务中的修改,即使没有提交,对其他事务也都是可见的。(脏读)

READ COMMITED(提交读)
    一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。(不可重复读)

REPEATABLE READ(可重复读)
    该级别保证了在同一个事务中多次读取同样的记录的结果是一致的。(幻读)

SERIALIZABLE(可串行化)
    通过强制事务串行执行,会在读取的每一行数据上都加锁,导致大量的超时和锁争用的问题

不可重复读和幻影读

不可重复读:两次执行同样的查询,可能得到不一样的结果。

如:T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。

幻影读:当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行

如:T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同

封锁的类型以及粒度,两段锁协议,隐式和显示锁定。

乐观锁与悲观锁。

MVCC 原理,当前读以及快照读,Next-Key Locks 解决幻影读。

范式理论。

SQL 与 NoSQL 的比较。

MySQL

B+ Tree 原理,与其它查找树的比较。

MySQL 索引以及优化。

查询优化。

InnoDB 与 MyISAM 比较。

水平切分与垂直切分。

主从复制原理、作用、实现。

redo、undo、binlog 日志的作用。

Redis

字典和跳跃表原理分析。

使用场景。

与 Memchached 的比较。

数据淘汰机制。

RDB 和 AOF 持久化机制。

事件驱动模型。

主从复制原理。

集群与分布式。

事务原理。

线程安全问题。