2019-11-10 我想让自己每天过的开心一些

我想借记录下我生活让我觉得还有点意义的每一刻。

SQL必知必会读书笔记(11:00 - 15:30)

SQL基础语法篇

SQL的学习阶段:SQL基础语法、SQL性能优化、主流数据库的使用和实践

  • SQL语句按照功能划分分为四种类型
    • DDL(Data Definition Language)数据定义语言:可以创建、删除和修改数据库和表结构
    • DML(Data Manipulation Language)数据操作语言:可以增加、删除、修改数据表中的记录
    • DCL(Data Control Language)数据控制语言:定义访问权限和安全级别
    • DDL(Data Query Language)数据查询语言:可以进行语句查询

为了可读性,约定的两个规范(SQL对大小写的区分因不同的数据库系统而异):

  • 表明、表别名、字段名、字段别名等都小写,如 hero
  • SQL保留字、函数名、绑定变量等都大写,如 SELECT
  • 数据库字段名推荐,下划线命名,如:role_main

几个概念:

  • DBMS (DataBase Management System)数据库管理系统(如Oracle、MySQL):DBMS = 多个数据库(DB)+ 管理程序
  • DB(DataBase)数据库:DB可理解成多张数据表
  • DBS(DataBase System)数据库系统 = 数据库管理系统 + 数据库管理人员DBA

关于SQL和NoSQL

  • SQL:关系型数据库查询语句
  • NoSQL:not only SQL,包括键值型(Redis)、文档型(MongoDB)、搜索引擎型(ES)等等。
    • NoSQL的优点:查找速度快
    • NoSQL的缺点:不够灵活,不能根据条件筛选过滤

SQL在Oracle的执行过程


SQL在ORACLE中的执行过程.png

以下引用自极客时间 https://time.geekbang.org/column/article/101104

1.语法检查:检查 SQL 拼写是否正确,如果不正确,Oracle 会报语法错误。

  1. 语义检查:检查 SQL 中的访问对象是否存在。比如我们在写 SELECT 语句的时候,列名写错了,系统就会提示错误。语法检查和语义检查的作用是保证 SQL 语句没有错误。
  2. 权限检查:看用户是否具备访问该数据的权限。
  3. 共享池检查:共享池(Shared Pool)是一块内存池,最主要的作用是缓存 SQL 语句和该语句的执行计划。Oracle 通过检查共享池是否存在 SQL 语句的执行计划,来判断进行软解析,还是硬解析。那软解析和硬解析又该怎么理解呢?在共享池中,Oracle 首先对 SQL 语句进行 Hash 运算,然后根据 Hash 值在库缓存(Library Cache)中查找,如果存在 SQL 语句的执行计划,就直接拿来执行,直接进入“执行器”的环节,这就是软解析。如果没有找到 SQL 语句和执行计划,Oracle 就需要创建解析树进行解析,生成执行计划,进入“优化器”这个步骤,这就是硬解析。
  4. 优化器:优化器中就是要进行硬解析,也就是决定怎么做,比如创建解析树,生成执行计划。
  5. 执行器:当有了解析树和执行计划之后,就知道了 SQL 该怎么被执行,这样就可以在执行器中执行语句了。

SQL在MySQL中的执行过程


SQL在MySQL中的执行过程.jpg
  1. 查询缓存:Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。需要说明的是,因为查询缓存往往效率不高,所以在 MySQL8.0 之后就抛弃了这个功能。
  2. 解析器:在解析器中对 SQL 语句进行语法分析、语义分析。
  3. 优化器:在优化器中会确定 SQL 语句的执行路径,比如是根据全表检索,还是根据索引来检索等。
  4. 执行器:在执行之前需要判断该用户是否具备权限,如果具备权限就执行 SQL 查询并返回结果。在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。

如何在 MySQL 中对一条 SQL 语句的执行时间进行分析

首先我们需要看下 profiling 是否开启,开启它可以让 MySQL 收集在 SQL 执行时所使用的资源情况

mysql> select @@profiling;

profiling=0 代表关闭,我们需要把 profiling 打开,即设置为 1:

mysql> set profiling=1;

然后我们执行一个 SQL 查询(你可以执行任何一个 SQL 查询):

mysql> select * from wucai.heros;

查看当前会话所产生的所有 profiles:


show Profiles.png

你会发现我们刚才执行了两次查询,Query ID 分别为 1 和 2。如果我们想要获取上一次查询的执行时间,可以使用:

mysql> show profile;

当然你也可以查询指定的 Query ID,比如:

mysql> show profile for query 2;

结果相同,如下:


show profile.png
注:以上图片均来自极客时间 《SQL必知必会》

刚开始学自由泳好嗨(16:30 - 18:00)

  • 第一次学自由泳,由于之前蛙泳了一阵子,水性稍微好点了,整体感觉学习自由泳没有第一次开始学蛙泳那么傻了。
  • 在水池边练习鞭腿1h,感觉自由泳更练习腿部力量
  • 抓着板子游,刚开始25米自由泳要休息一下,后面累了每15米就要休息一会。
  • 比起蛙泳,腿更容易抽筋更容易麻。
  • 注意点:刚开始练习,先练鞭腿,大腿带动小腿,身体发力,带动四肢,脚面绷直,脚内扣,内八字。
  • 由于认真看了知乎教程,认真的练习鞭腿,虽然刚开始,但是感觉比其他开始学自由泳的游的快一些,好多姿势不标准的,拿小腿打水的,教程里严重指出是错误的了,看看别人的经验总结还是蛮管用的,感谢知乎,感谢梦觉老师,感谢李开源老师

你可能感兴趣的:(2019-11-10 我想让自己每天过的开心一些)