MySQL

数据库三范式

  • 字段不可再分

  • 有主键,非主键字段依赖主键字段
  • 非主键字段不依赖其他非主键字段

数据库事务的4大特性

  1. A-原子性
  2. C-一致性
  3. I-隔离性
  4. 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次数。

特点:

  • 所有叶子节点指针指向下一个叶子节点
  • 非叶子节点仅存储索引
  • 真实数据存在叶子节点中

如何定位并优化慢查询

  1. 查询慢查询日志,定位慢定位SQL语句
  2. explain分析sql语句。
  3. 更改sql语句使得sql语句走索引

笛卡尔积

没有连接条件的表关系,返回的结果为笛卡尔积。

数据库连接池

建立一个数据库连接比较消耗时间和资源,中间涉及到TCP连接的三次握手。

因此使用连接池保存一定数量的与数据库服务器建立好的连接,当需要连接数据库服务器的时候,只需要从连接池中取出一条空闲的连接即可。

一回生,二回熟
原文地址:https://www.cnblogs.com/zzytxl/p/12728133.html