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.如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

原文地址:https://www.cnblogs.com/yangkang0202/p/9070928.html