美文网首页
mysql基础知识

mysql基础知识

作者: 摆渡人_607f | 来源:发表于2020-01-06 14:38 被阅读0次

MySQL客户端与服务端的通信方式是“半双工”

全双工:双向通信,发送同时也可以接收

半双工:双向通信,同时只能发送或者接收,无法同时操作

单工:单向通信

通信状态查询 show processlist

查询缓存

工作原理:

缓存select操作的结果集合SQL语句

新的select语句,先去查询缓存,判断是否存在可用的记录集

存储引擎

1、Active存储引擎(压缩协议进行数据的存储);

特点:只支持insert和select两种操作;只允许自增id列建立索引;行级锁;不支持事务;数据占用磁盘少

2、MyISAM;3、Innodb;4、Memory存储引擎

一、MyIsam和innodb的对比

1、MyISAM不支持事务,Innodb是事务型存储引擎。

2、MyISAM只支持表级锁,Innodb默认支持行级锁

3、MyISAM不支持外键,Innodb支持外键

4、MyISAM支持全文索引,Innodb不支持

5、MyISAM引擎的查询、更新、插入的效率都比innodb高

总结:在读多少写的应用中还是Innodb插入性能更稳定,如果对比读取速度要求比较快的选MyISAM

附加:

1、MyISAM属于堆表,在磁盘上有三个文件 .frm,.MYI(存放索引),.MYD(存放数据),支持三种不同的存储方式:静态表、动态表、压缩表

2、Innodb属于索引组织表,支持两种存储方式:共享表空间存储和多表空间存储。

3、关于自动增长:MyISAM引擎的自动增长列必须是索引,如果是组合索引,自动增长列可以不是第一列;

Innodb引擎的自动增长列必须是索引,如果是组合索引,自动增长列必须是组合索引的第一列

4、关于主键:MyISAM可以没有主键和自动索引,MyISAM的索引都是保存行地址

    Innodb引擎如果没有设置主键或者非空的唯一索引,就会自动生成一个6个字节的主键(用户不可见)

5、关于count函数,如果没有where条件,MyISAM保存表的总行数,直接取就行

Innodb需要遍历整个表,如果有where条件,处理方式一样

二、事务

1、事务的ACID属性

原子性、隔离性、持久性、最终一致性

2、并发事务带来的几个问题

更新丢失、脏读、不可重复读、幻读

3、事务的隔离级别

读未提交、读已提交、可重复读(默认)、序列化

三、锁

共享锁、排他锁、意向共享锁(表锁)、意向排他锁(表锁)、间隙锁、临键锁、记录锁、死锁

1、mysql死锁怎么避免?怎么解决?

避免死锁

1.1、类似的业务逻辑以固定的顺序访问表和行

1.2、大事务拆小

1.3、同一个事务中,尽可能一次锁定锁需要的所有资源

1.4、为表添加合理是索引,避免表锁

MySQL有两种死锁处理方式:

等待,直到超时(innodb_lock_wait_timeout=50s)。

发起死锁检测,主动回滚一条事务,让其他事务继续执行(innodb_deadlock_detect=on)。

由于性能原因,一般都是使用死锁检测来进行处理死锁。

2、innodb 如果没加索引,写操作会加表锁;如果加了所有,只加行锁和间隙锁

3、死锁的条件

3.1)互斥条件

3.2)不可抢占条件

3.3)循环等待条件

4、乐观锁和悲观锁

4.1)悲观锁:一锁二查三更新,需要数据库本身提供支持 select 。。。 for update来实现

4.2)乐观锁:一般是逻辑上实现,不需要数据库本身提供支持,一般的做法是在需要的数据上增加一个版本号或者时间戳。

四、索引

正确的创建合适的索引,是提升mysql数据查询性能的基础。

索引是为了加速对表中数据行的检索而创建的一种分散的数据结构。

1、种类:

主键索引:数据记录里面不能有null,数据内容不能重复,在一张表里面不能有多个主键索引。

唯一索引:字段数据是唯一的

组合索引:多个列建立索引

普通索引:使用字段关键字建立的索引,主要是提高查询速度

全文索引:只有MyISAM支持

2、结构:B+Tree索引、Hash索引、全文索引(只有MyISAM支持)、RTree

备注:hash索引:由于hash的唯一及类似键值对的形式很适合做索引,可以一次定位,但是对于范围查询、排序、组合索引,效率不高

3、索引的优缺点:

优点

3.1、索引能极大的减少存储引擎需要扫描的数据量

3.2、索引可以把随机IO变为顺序IO

3.3、索引可以帮助我们在分组,排序等操作时,避免使用临时表

缺点

3.1)提高了查询速度,但是降低了表的更新速度,因为更新表的时候,不仅要更新下数据,还有更新下索引文件

3.2)建立索引文件会占用磁盘空间,一般情况不严重。但是在一个大表上建立多种组合索引,索引文件会增长很快。

4、索引失效

4.1)如果条件中有or,即使其中有条件带索引也不会使用,除非全都都是索引

4.2)对于组合索引,如果不满足最左匹配原则,不使用索引

4.3)like查询以%开头,不使用索引,如果离散度低,也不走索引

4.4)如果列是字符串类型,那一定要在条件中将数据用引号引用起来,否者不使用索引

4.5)查询的数量是大表的大部分,应该是30%以上

4.6)对索引列进行运算

4.7)mysql使用不等于,无法使用索引

4.8)mysql中使用is not null 或 is null。

五、基础理论

1、三范式

1.1)建表时要保证列的原子性(不可分割)

1.2)数据库表中的每个实例或记录必须可以被唯一的区分

1.3)一个关系中不包含已在其他关系已包含的非关键字信息

2、drop、delete、truncate的区别和在什么场景下使用

2.1)drop

属于DDL;不可回滚;不可带where;删除表结构和内容;删除速度快

2.2)truncate

属于DDL,不可回滚;不可带where;删除表内容;删除速度快

2.3)delete

属于DML,可回滚;可带where,删除表内容,删除速度慢,需要逐行删除

3、为什么选择B+Tree作为索引结构

3.1)B+树扫库、表能力更强

3.2)B+书的磁盘读写能力更强

3.3)B+树的排序能力更强

3.4)B+树的查询效率更稳定

六、MVCC 多版本并发控制

避免写操作的阻塞,从而引发读操作的并发问题

1、mysql表中会默认加两列:数据行版本号、删除版本号;有个全局事务ID

2、查询的规则

2.1、查询数据行版本号早于当前事务版本的数据行

2.2、查询删除行版本号要么为null,要么大于当前事务版本号的记录

七、undo Log 和redo Log

1、undo log:是为了实现事务的原子性而出现的产物

快照读(普通的select就是快照读)、当前读(SQL读取的数据是最新版本,一般在修改数据的情况下)

2、redo log:是为了实现事务的持久性而产生的产物

相关文章

  • mysql索引,锁机制,主从同步,日志分析

    mysql架构 mysql学习 MySQL系列(一)---基础知识大总结 --- 棒棒的!MySQL系列(三)--...

  • PHP全栈学习笔记18

    php基础知识,JavaScript,jQuery,ajax基础知识 linux基础知识,mysql数据库的基础与...

  • PHP全栈学习笔记18

    php基础知识,JavaScript,jQuery,ajax基础知识 linux基础知识,mysql数据库的基础与...

  • PHP面试知识脉络(更新中)

    PHP基础知识Javascript、jQuery、ajax基础知识Linux基础知识MySQL数据库的基础与优化程...

  • MySQL基础

    MySQL基础知识一 MySQL基础知识二 DQL 1. `` : 着重号,用来区分关键字和字段名 2. 查询过程...

  • MYSQL基础

    MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...

  • Mysql基础操作扫盲

    Mysql基础知识点整理:思维发散 未完,待续

  • SQL基础知识整理

    SQL基础知识整理 0. 查看当前数据库的配置 mysql> \s -------------- mysql Ve...

  • 找工作必备技能

    基础知识Java和JQuery SpringMVC 源码学习-入门 Mysql存储过程,Mysql高级查询相关SQ...

  • mysql学习大纲

    一、基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 MySQL存储引擎类型 In...

网友评论

      本文标题:mysql基础知识

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