数据库三范式
-
字段不可再分
- 有主键,非主键字段依赖主键字段
- 非主键字段不依赖其他非主键字段
数据库事务的4大特性
- A-原子性
- C-一致性
- I-隔离性
- D-持久性
MySQL的两个引擎
- MyISAM
- InnoDB
关于锁的区别:
- MyISAM默认使用表级锁,不支持行级锁
- InnoDB默认支持行级锁,但是支持表级锁
- sql语句,走索引,使用行级锁;不走索引,使用表级锁
适合场景:
前者查频繁,后者增删改查频繁。另外,MyISAM不支持事务。
索引的结构
- B+ - Tree索引
- Hash索引
- 位图索引
平衡二叉树不适合作为索引,因为没有充分利用到磁盘预读。每次IO读取一个磁盘页,但是平衡二叉树是逻辑上的连续,实际在地址中不一定连续,因此每次读取的磁盘页上的数据大部分是用不到的。
B树适合作为索引,充分利用了磁盘预读。
索引在哪?
索引本身较大,不可能完全放在内存中。因此索引以索引文件的形式放在磁盘中。索引的查找过程中需要IO,每次读取一个磁盘块的内容到磁盘中,IO次数决定查询效率。
索引和主键的区别?
- 主键是唯一性索引,但是唯一性索引不一定是主键
- 主键只能有1个,唯一性索引可以有多个
- 主键不能为null,唯一性索引可以为null
聚集索引和非聚集索引
记录的排列顺序和索引的排列顺序一致,是聚集索引,否则是非聚集索引。
密集索引和稀疏索引
每一个搜索码都有一个索引项,包含对应的索引码和对应记录所在的地址。但是系数索引,只有部分的搜索码包含索引项。
B-Tree
有序数组+平衡多叉树
B+-Tree
有序数组链表 + 平衡多叉树
B+树将真实数据放在叶子节点,而不是内层节点。若放在内层节点,磁盘块的数据项便大幅下降,则B+树的深度将增加,会增加磁盘的IO次数。
特点:
- 所有叶子节点指针指向下一个叶子节点
- 非叶子节点仅存储索引
- 真实数据存在叶子节点中
如何定位并优化慢查询
- 查询慢查询日志,定位慢定位SQL语句
- explain分析sql语句。
- 更改sql语句使得sql语句走索引
笛卡尔积
没有连接条件的表关系,返回的结果为笛卡尔积。
数据库连接池
建立一个数据库连接比较消耗时间和资源,中间涉及到TCP连接的三次握手。
因此使用连接池保存一定数量的与数据库服务器建立好的连接,当需要连接数据库服务器的时候,只需要从连接池中取出一条空闲的连接即可。