• FATMAN89 置顶
    2019-06-18
    老师讲的挺好的,想请问老师,课程所用到的数据库在哪里可以获得呢,多谢

    编辑回复: 第五篇文章会给出下载链接~

    
     3
  • we 置顶
    2019-06-19
    老师,那两张,oracle,mysql 的大图。是哪儿的。有没有高清的啊。很多小字看不清楚。能否给个高清的链接。

    编辑回复: 请您点击这里进行下载:https://github.com/cystanford/SQL-XMind

    
     2
  • KaitoShy
    2019-06-17
    1. 绑定变量概念:sql语句中使用变量,通过不同的变量值来改变sql的执行结果
    优点:减少硬解析,减少Oracle的工作量
    缺点:参数不同导致执行效率不同,优化比较难做。
    2.MyISAM的使用场景为读写分离的读库, 而InnoDB为写库
    3. C共享池,看图中有个Shared SQL Area。
    
     44
  • Zain Lau
    2019-06-18
    今年考研必上北京邮电大学!

    作者回复: 加油~ 没问题的

     8
     36
  • 墨禾
    2019-06-17
    【回答3个问题】
    1、oracle中的绑定变量指的是 sql语句在执行时,通过改变不同的变量值来改变sql的执行结果;
    优点:避免硬解析,提高SQL语句执行的效率;
    缺点:如果使用绑定变量,那么优化器就会忽略直方图的信息,在生成执行计划的时候可能不够优化。

    2、MyISAN:
    不支持事务、外键,速度快、资源占有少;
    InnoDB:支持实物、外键、聚集索引,5.6版本以后的mysql支持全文索引;

    使用场景:
    需要支持事物的场景考虑InnoDB;
    以读为主的数据表用MyISAM;
    MyISAM奔溃后的系统的恢复较困难,没有要求的话可以用;
    不知道选什么数据库合适的话,用InnoDB不会差【5.5版本以后的mysql默认的引擎是InnoDB】

    3、oracle在共享池中进行缓存。

    【学习总结】
    1、get一个学习方法
    培养抽象事物的能力,掌握学习要点,如sql知识,重点掌握sql执行的原理,因为在不同的数据库中,sql执行的原理大同小异,只是在执行的顺序上有所不同。
    2、get一个oracle sql优化的技巧
    通过绑定变量,优化sql结果
    3、get一个oracle、mysql共同的执行sql的原理
    SQL语句-》缓存查询-》解析器-》优化器-》执行器
    【PS:老师后面能不能推荐一些实战项目练习,来巩固知识点呢?】
    展开
     2
     34
  • 虫子的一天
    2019-06-17
    老师好,我原来用SQLSERVER比较多,经常会碰到参数化的SQL查询中,因为SQLSERVER已经缓存了查询计划,导致某些特定参数查询效率很低的事情(刚才文中也有提及Oracle也有类似问题)。
    我刚听讲似乎MySQL是没这个机制的,是否MySQL就不会碰到类似问题?
    另外如果不让SQLserver使用缓存的查询计划,每次都重新生成,又导致CPU高,MYSQL又是如何避免类似问题的
    感谢
    
     19
  • Sam
    2019-06-17
    1.什么是绑定变量
    Oracle的绑定变量即是把谓词条件的具体值更换成一个变量,这样Oracle在共享池做hash映射时,同一类SQL但谓词条件值不同的,可以共享执行计划,进行软解析而不需要硬解析,例如
    select * from tab where id=1和select * from tab where id=10改成绑定量
    select * from tab where id=:a;

    2.绑定变量优缺点
    优点:减少硬解析,加快SQL处理过程,减少系统开销;
    缺点:绑定变量对应到不同的值,由于数据分布的问题,可能最佳的执行计划不一定是同一个,但是绑定变量在软解析时就固定对应到特定的执行计划上。

    解析后的SQL语句存放在Oracle的共享池。

    想请教老师一个问题,MySQL没有软硬解析的设计,那MySQL是怎么应对硬解析的低效呢?
    展开
     1
     10
  • NO.9
    2019-06-30
    C,共享池。
    讲的好系统啊,有种想学个花拳绣腿,结果教我九阳神功的感觉。

    作者回复: 很好 加油~

    
     9
  • 跳跳
    2019-06-17
    绑定变量:在SQL语句中使用变量,通过不同的变量取值来改变SQL的执行结果
    优点是可以做软解析,避免创建解析树,生成执行计划,提高oracle的运算效率
    缺点是可能会导致执行计划不够优化
    InnoDB 存储引擎:最大特点是支持事务、行级锁定、外键约束等
    MylSAM:不支持事务、也不支持外键,最大特点是速度快、占用资源少
    选择题选C,共享池的主要作用是缓存SQL语句和该语句的执行计划
    展开
    
     4
  • allean
    2019-06-17
    共享池

    作者回复: 对的

    
     4
  • 时间的奴隶
    2019-06-19
    老师, 我想提个建议, 可以吗?
    MySQL 的存储引擎是一大特色,其中 MyISAM 和 InnoDB 都是常用的存储引擎,这两个搜索引擎的特性和使用...
    这里好像写错了, 前面是存储引擎, 后面变成搜索引擎了;
    另外还有三个疑问, 希望老师可以答疑:
    1. <<MySQL实战45讲>>中, 林老师讲到的是, MySQL可以分为两层: Server层和存储引擎层(连接器是属于Server层), 您这里讲的是, 分三层: 连接层, SQL层 和 存储引擎层, 这个分层是没有严格的定义的吗?
    2. 上面那个图, https://static001.geekbang.org/resource/image/d6/a0/d6ab4e24003df69503bb055810a29fa0.jpg
    缓存查询 这一过程结束后, 在最后 有两个箭头, 一个指向了 执行器, 另一个指向了 输出结果, 这个略感迷惑;
    3. InnoDB是在5.5.5作为默认存储引擎的, 还是在5.5.8作为默认存储引擎的呢? 查了MySQL的网站, https://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-5.html#mysqld-5-5-5-innodb
    好像是5.5.5?

    感谢老师的课程! 谢谢!
    收获很大!
    展开
    
     3
  • Demon.Lee
    2019-06-17
    另一篇文章说:5.5.5以上默认Engine是Innodb,这篇说是5.5.8,所以谁是对的?
    
     3
  • To you
    2019-06-29
    @吴青 回答下这位老哥的问题,在sql执行的时候 可能有触发器 得在执行器阶段才能确定的
    
     2
  • 吴青
    2019-06-21
    老师,mysql的sql层的鉴权为什么要放在第四步,语义分析完后是不是就可以鉴权了,省去了生成执行路径的开销。mysql为什么这么做呢
    
     2
  • redrain
    2019-06-17
    老师,类似状态,status这种有几个固定值的列,有必要建立索引吗,广泛流传不需要建立,但是我发现建立有提升查询效率,innodb引擎5.7
    
     2
  • leslie
    2019-06-17
    再次听一遍不一样的东西还是会发现不一样的收货:这大概就是数据库用的多了有时代码层确实没啥 ,可是切换中的优化过程还是会疏漏某些分析细节。
    explain已经用到了极致,忘了优化的极限其实是多种方式的相辅相成;profile早期用过,反而这几年用的很少很少;explain更加管用-在多种数据库中,反而忘了有时需要一些简单的手段辅以。

    作者回复: 加油~ 哈哈

    
     2
  • 张驰皓
    2019-12-01
    感觉 MySQL 部分的第二张图(流程图)有点问题,“缓存查询”后“找到”分支的箭头应该不用再指向”缓存查询“吧?

    作者回复: 感谢认真提问,缓存查询后,如果找到了就直接输出结果。如果没有找到就执行 解析器=>优化器=>执行器的流程,然后可以将结果存储到 缓存中方便后续进行查询。所以箭头回向指的是这个

    
     1
  • firstblood
    2019-09-25
    MyISAM 和InnoDB的比较参考https://www.jianshu.com/p/a957b18ba40d 这个文章

    作者回复: 多谢分享

    
     1
  • robin
    2019-07-03
    老师,oracle中执行顺序中,是不是应该先进行权限校验更妥一些呢?如果语法和语义校验都通过的话,权限被校验住,是不是就前功尽弃了?
     1
     1
  • DriveMan_邱佳源
    2019-06-30
    老师,我想问一个问题就是mysql的用户权限检查,为什么是在优化器优化之后检查的,如果用户没有权限,那优化这一步不就是浪费更多资源吗,为什么不是在解析器解析之后执行权限检查的。
     1
     1
我们在线,来聊聊吧