美文网首页
2019-11-10 我想让自己每天过的开心一些

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

作者: 勒昂浪 | 来源:发表于2019-11-11 10:13 被阅读0次

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

    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 我想让自己每天过的开心一些

          本文链接:https://www.haomeiwen.com/subject/fqlabctx.html