• msyql高级的学习笔记


    MySQL事务4个特性:

    原子性:一个事务中的所有操作,要不全部完成,要不一个都不完成,不会中途结束。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务没有执行过一样。

    一致性:完成一个操作对设计好的数据库完全没有影响。其中包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

    隔离性:事务之前不会相互影响。

    持久性:事务执行成功后必须全部写入磁盘。

    MySQL事务处理的两种主要方法:

    1.用BEGIN,ROLLBACK,COMMIT来实现

    BEGIN开始一个事务

    ROLLBACK事务回滚

    COMMIT事务确认

    2.直接用SET来改变MySQL的自动提交模式:

    SET AUTOCOMMIT=0禁止自动提交

    SET AUTOCOMMIT=1开启自动提交

    事务的例子:

    1.不使用回滚的情况:

    2.使用回滚的情况:

     

    分析SQL语句性能下降,执行时间长,等待时间长的原因:

    1.索引失效或未建立索引

    2.关联查询太多join(设计缺陷或不得已的需求)

    3.服务器调优及各个参数设置(缓冲、线程数等)

    七种JOIN理论:

    leftJoin:select * from A left join B on A.id=B.id

    rightJoin:select * from A right join B on A.id=B.id

    innerJoin:select * from A inner join B on A.id=B.id

    individualA:select * from A left join B on A.id=B.id where B.id IS NULL

    individualB:select * from A right join B on A.id=B.id where A.id IS NULL

    fullJoin:select * from A FULL OUTER JOIN B ON A.id=B.id

    notContainCommon:select * from A FULL OUTER JOIN B on A.id=B.id where A.id IS NULL OR B.id IS NULL

     

    MySQL索引:

    索引可以理解为"排好序的快速查找数据结构"。

    结论:数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。

     

    索引的优势

    1.类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本。

    2.通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。

     

    索引的劣势:

    1.索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占空间的。

    2.虽然索引大大提高了查询速度,同时却降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。

    3.索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询sql。

     索引分类

    单值索引:一个索引只包含单个列,一个表可以有多个单列索引。

    唯一索引:索引列的值必须唯一,但允许有空值。

    复合索引:一个索引包含多个列。

    有四种方式来添加数据表的索引:

    ALTER TABLE 表A ADD PRIMARY KEY(列名):该语句添加一个主键,者一位着索引值必须时唯一的,且不能为NULL。

    ALTER TABLE 表A ADD UNIQUE index_name(列名):这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

    ALTER TABLE 表A ADD INDEX index_name(列名):添加普通索引,索引值可出现多次。

    ALTER TABLE 表A ADD FULL TEXT index_name(列名):该语句指定了索引为FULLTEXT,用于全文索引。

    哪些情况需要创建索引:

    1.主键自动建立唯一索引。

    2.频繁作为查询条件的字段应该创建索引。

    3.查询中与其他表关联的字段,外键关系建立索引。

    4.频繁更新的字段不适合创建索引。

    5.Where条件里用不到的字段不创建索引。

    6.单键/组合索引的选择问题,在高并发下倾向创建组合索引。

    7.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度。

    8.查询中统计或者分组字段。

     哪些情况不需要创建索引:

    1.表记录太少。

    2.经常增删改的表。

    3.如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

  • 相关阅读:
    WPF e.Systemkey的一个坑
    Codeforces Round #375 (Div. 2) ABCDE
    主席树模板(poj2104)
    hdu5909-Tree Cutting(树形dp)
    HYSBZ 2243-染色 (树链剖分)
    POJ3237-Tree (树链剖分,线段树区间更新+点更新+区间查询)
    POJ2763-Housewife Wind(树链剖分)
    2016东北四省赛 小结
    HDU3966-Aragorn's Story(树链剖分)
    POJ 2749--Building roads(2-SAT)
  • 原文地址:https://www.cnblogs.com/yangkang0202/p/9070928.html
Copyright © 2020-2023  润新知