基础篇

基本概念

主键、索引、外键

  • 主键是一列,其值可以唯一标识表的每一行数据,每个表只能一个主键,主键不能重复,也不能包含NULL值。
  • 索引没有重复值,但可以有空值,用于快速查询数据
  • 外键是表中一字段,其值是另一个表的主键,用于建立两表之间关系

三大范式

连接

将各个表的记录拉取出来进行依次匹配,将匹配的结果发给客户端

笛卡尔积:连接查询的结果中包含一个表的每一条记录与另一表的记录的组合,这样的查询结果就是笛卡尔积。 例如:表1有5条记录,表2有6条记录,ab表的笛卡尔积就是30。

连接过程:

  1. 确定第一个需要查询的表,此表就是驱动表
  2. 从驱动表中取出每一条符合搜索条件的记录,到接下来的表查询匹配的记录,驱动表之后的那个表就是被驱动表
  3. 只需要访问启动表一次,可能会多次访问被驱动表

内连接:驱动表中的记录在被驱动表中找不到的记录,那么驱动表的这条记录不会加到最后结果中。 外连接:驱动表的中记录在被驱动表中找不到的记录,仍需要加到最后结果中。

where: 无论内外连接,不符合where 子句的记录不会加到最后结果中 on:在内连接中与where 等价。在外连接中如果驱动表中记录在被驱动表中没有记录匹配,该驱动表记录仍会加到结果中,对应的被驱动表字段以null填充

查询语句是如何执行的

  1. 连接:客户端与服务器连接,通过mysql 连接器(权限判断)
    • 建立连接复制,使用长连接
    • 长连接过多,导致OOM。可定期断开,通过 mysql_reset_connection 字段重新初始化连接
  2. 查询缓存:
    • 执行查询语句前,先查询缓存是否有结果。如果有,直接取出返回,没有命中,执行查询语句,并且吧结果放入缓存
    • mysql8.0开始,执行查询语句,不会再走查询缓存阶段(这是因为查询缓存在高并发环境下会带来显著的性能问题,导致系统性能下降。查询缓存需要不断地维护和刷新,在数据修改频繁的情况下,这会带来很大的开销。)

常用函数

字符集&排序规则

版本兼容