SQL必知必会03:SQL的执行方式

李文轩 2019-06-23
声明:这是本人学习极客时间的SQL必知必会的笔记,有侵权请联系我。


  1. Oracle中的SQL执行方法,硬解析和软解析
  2. MySQL中的SQL执行方法,它的体系结构是怎么样的
  3. 存储引擎,MySQL有什么存储引擎

Oracle中的SQL执行方法,硬解析和软解析

Oracle 的 SQL 语句执行步骤
  1. 语法检查:检查SQL的拼写
  2. 语义检查:检查SQL中的访问对象是否存在。这个对象包括我们自定义的列名、表名等等
  3. 权限检查:查看用户是否具备访问该数据的权限
  4. 共享池检查:共享池(Shared Pool)是一块内存池,最主要的作用是缓存SQL语句和该语句的执行计划。Oracle通过检查共享池是否存在SQL语句的执行计划,来判断用软解析还是硬解析。在共享池中,Oracle首先对 SQL 语句进行 Hash 运算,根据 Hash 值在库缓存(Library Cache)中查找,如果存在 SQL 语句的执行计划,就直接拿来执行(直接进入“执行器“),此为软解析。如果没有相应的执行计划,Oracle就要创建解析树进行解析,然后生成执行计划,进入“优化器”,此为硬解析
  5. 优化器:硬解析的一环,创建解析树,生成执行计划。
  6. 执行器:SQL的执行需要解析树和执行计划,有了这两个必要条件就能执行了。

Oracle中的术语

  • 库缓存:主要缓存 SQL语句和执行计划。通过它,Oracle判断 SQL 语句是否需要进入硬解析。为了提升执行效率,应该尽量避免硬解析
  • 数据字典缓冲区:对象定义,比如表、视图、索引等对象。对 SQL 语句进行解析的时候,如果需要相关数据,会从数据字典缓冲区中提取。

优化

  • 避免硬解析:
    • Oracle 在库缓存步骤决定硬或软解析;为了提升执行效率,往往需要避免硬解析,因为执行过程中,创建解析树和生产执行计划很消耗资源。

    • Oracle的绑定变量帮助我们解决此问题。绑定变量在 SQL语句中使用的变量,通过不同的变量取之来改变 SQL 的执行结果。

    • 优点:提升软解析的可能性

    • 不足:可能会导致生成的执行计划不够优化

    • 例子:

        -- 普通的查询语句
        select * from player where player_id = 10001;
        -- 查询不同id时,都会创建一个新的查询解析。
      
        -- 绑定变量
        select * from player where player_id = :player_id;
        -- 在第一次查询后,在共享池中就会存在这类的查询计划;库缓存的步骤会决定进行软解析。
      
      

MySQL中的SQL执行方法

MySQL 的分层
  • MySQL用 Client/Server 架构,服务器端是使用 mysqld

组成层

  1. 连接层:客户端和服务器端建立连接,客户端发送SQL至服务端
  2. SQL层:对SQL语句进行查询处理
  3. 存储引擎层:与数据库文件通信,负责数据的读写。
    • 磁盘
    • 内存
    • 网络

SQL层的执行逻辑

MySQL 的 SQL 语句执行步骤
  1. 查询缓存:8.0后无使用。Server若在缓存查询中找到此SQL语句,直接返回结果;反之,进入解析器阶段。
  2. 解析器:对SQL语句进行语法分析、语义分析。
  3. 优化器:在优化器中确定SQL语句的执行路径,像全表检索、索引检索等等。
  4. 执行器:检查用户权限、若具备权限则返回结果。8.0版本在这步骤会将结果放入查询缓存。
  • 查询缓存在8.0后关闭的原因:一旦数据表有变更,缓存都将清空。因此只有数据表是静态或很少变化时,缓存查询才有价值。如果碰到经常更新的情况,反而增加了查询时间。

MySQL各热门存储引擎

  1. InnoDB:5.5版本后的默认存储引擎。支持食物、行级锁定、外键约束
  2. MyISAM:在5.5版本前的默认存储引擎。不支持事物、不支持外键。优点为速度快、占用资源少
  3. Memory:使用系统内存为存储介质,获得更快响应速度。不足是,若mysqld进程崩溃,所有数据将丢失。如果使用场景是当数据是临时的情况下才会使用。
  4. NDB:NDB cluster,主要用于 MySQL cluster分布式集群环境,类似于 Oracle 的RAC集群。
  5. Archive:良好的压缩机制,用于文件归档
  • 一个数据库中,每个表都能采用不同存储引擎。根据实际的数据处理需要来选择存储引擎。

查看一条 SQL 语句的执行情况

  • profiling,开启此功能可以让 MySQL 收集在 SQL 执行时所使用的资源情况
    -- 查看 profiling 是否开启
    select @@profiling;
    
    -- 0代表关闭,1代表开启
    
    -- 开启 profiling
    set profiling=1;
    
  • 查看 profile
    show profiles;
    -- 查看当前会话所产生的所有 profiles(query_id、duration、query)
    
    show profile;
    -- 直接获取上一次查询的执行时间
    -- 这里会列出执行 SQL 语句的每个步骤的耗时
    
    -- 或者直接查看某一指定 query id
    show profile for query 2;
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容