美文网首页
2020-11-07-Mysql(优化基础)

2020-11-07-Mysql(优化基础)

作者: 冰菓_ | 来源:发表于2020-11-20 11:18 被阅读0次

    1.三大范式

    • 第一范式:确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列).
    • 第二范式:在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关(一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的部分)
    • 第三范式:在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关(另外非主键列必须直接依赖于主键,不能存在传递依赖).
    image.png image.png

    2.explain

    (索引)


    image.png

    (哪些情况用索引)


    image.png

    (id 注意如果有虚拟表则虚拟表的后面的数字是id号)


    image.png

    (select_type)


    image.png

    (type)


    image.png

    (是否用到了索引)


    image.png image.png image.png image.png

    (extra)


    image.png

    3.索引优化

    image.png
    image.png

    4.为什么不建议用select * ?

    假设某一天修改了表结构,如果用select *,返回的数据必然会会变化,客户端
    是否对数据库变化作适配,是否所有地方都做了适配,这都是问题。
    可能会存在不需要的列,传输过程中有不必要的性能损耗;
    客户端解析查询结果也需要更多损耗

    5.例题

    使用了select ,必然导致数据库需要先解析代表哪写字段,从数据字段中将*转化为具体的字段含义,存在性能开销;
    由于覆盖索引我们可能只要获取索引,select * 增加了不必要的io流

    image.png

    6.order by

    image.png

    7.锁理论

    image.png

    脏读 :
    读取到了未提交的数据(如果事务这时候回滚了,那么第二个事务就读到了脏数据)

    不可重复读
    重点是修改:在同一事务中,同样的条件,第一次读的数据和第二次读的数据不一样。(一个事务多次读取同一范围内数据时,另外一个事务发生insert操作并提交了)。数据变化。

    幻读
    重点在于新增或者删除:在同一事务中,同样的条件,,第一次和第二次读出来的记录数不一样。(一个事务多次读取同一条数据时,另外一个发生了事务发生update,delete操作并提交了。insert操作一条新数据并不会影响刚才被读的那条数据。)。行数变化。

    (读取数据一致性的描述)


    image.png image.png

    (锁住行)


    image.png image.png

    相关文章

      网友评论

          本文标题:2020-11-07-Mysql(优化基础)

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