1、存储引擎区别

MyISAM:不支持事物、仅支持表级锁、支持B+树索引

MEMORY:不支持事物、仅支持表级锁、支持B+树和HASH索引

InnoDB:支持事物、支持行级锁、支持B+树索引

2、锁机制

MyISAM、MEMORY存储引擎使用的是表级锁,分别为表共享读锁和表独占写锁,显示加锁LOCK TABLE,

InnoDB存储引擎即支持行级锁也支持表级锁,默认采用是行级锁,分别为共享锁和排他锁,显示加锁用lock in share mode 显式的加共享锁,用 for update 显式的加排他锁,InonoDB的存储引擎在使用INSERT、DELETE、UPDATE操作使默认使用排他锁,在使用SELECT不会加任何的锁

InnoDB锁机制的重点在于行级锁的实现方式是——索引加锁

1、只有通过索引检索数据时才会触发行级锁,否则使用表级锁

2、即使是访问不同行的数据,如果使用的相同的索引键,会发生锁冲突

3、如果数据表建有多个索引时,可以通过不同的索引锁定不同的行

select * from user where id > 100 for updata,例如显示加排他锁

区别:

行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

表级锁: 开销小,加锁快;不会出现死锁(因为MyISAM会一次性获得SQL所需的全部锁);锁定粒度大,发生锁冲突的概率最高,并发度最低。

综上:行级锁使用在高并发环境下,对事物完整性要求较高的系统,而表级锁适用于并发不高,以多查询,少更新的系统

3、索引 InnoDB默认支持B+树

mysql索引也称为"键",索引优化是对查询性能优化的最有效的手段了。索引的数据结构B+树,索引的功能就是加速查找功能

B+树数据结构的性质

(1)、索引字段要尽量小

(2)、索引的最左匹配原则,

MYSQL索引分类

(1)普通索引 index 加速查找 (2)唯一索引 unique 唯一约束+加速查找(3)主键唯一索引 primary key 不为空且唯一+加速查找(4)联合索引 (column1,column2)

注意索引无法命中情况

(1)‘>’、‘

‘like‘、‘between‘

‘or’的条件中列没有加索引不会走索引,

‘!=’普通索引不走索引,主键索引走索引

(2)索引列使用函数

4、乐观锁:在更新金额或者状态的时候包含原值信息,这并不是数据的锁,而是利用了数据比较抽象出来的锁,例如:update xx set amount=${amount} where id=“${id}” and amount=${origAmount}

悲观锁:数据库的行级锁,因为行级锁的颗粒度小,需要的系统开销大,可能会出现死锁的情况,所以称为悲观锁。在操作DML(insert,update,delete)时oracle和mysql会自动加上行级锁,显式的for update也是加上行级锁

redis分布式锁:使用已有组件redisOneBuOne

select * from table for update 【of column】【nowait|wait 3】for update nowait 第二个执行遇锁时直接抛异常 for update wait 5 第二个执行遇锁时等待5s时间

注意:使用悲观锁时,如果是多表关联查询,例如:select * from t1,t2 where t1.id = t2.id and t1.age = ‘20‘ for update;就会把T1和T2两个表中符合条件的行锁定;此时,我们需要使用for update of column_name

例如:select * from t1,t2 where t1.id = t2.id and t1.age = ‘20‘ for update of t1.id;这样就会只把T1表中的符合条件的行加锁,T2表中符合条件的行不会加锁。

5、根据设置数据库不同的隔离级别,在不同的隔离级别下可能发生的不同问题

更新丢失、脏读(update)、幻读(insert)、不可重复读

MySQL 8 改变了之前的密码验证插件,导致现在去连接的话,出现了错误 mysql 8.0 默认使用 caching_sha2_password 身份验证机制 —— 从原来的 mysql_native_password 更改为 caching_sha2_password

ALTER USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘password‘ PASSWORD EXPIRE NEVER; #修改加密规则

ALTER USER ‘root‘@‘localhost‘ IDENTIFIED WITH mysql_native_password BY ‘password‘; #更新一下用户的密码

FLUSH PRIVILEGES; #刷新权限

MYSQL多表关联查询命中索引的注意事项(sql优化)

1、ON 关联的字段必须要加索引(加快关联查询的速度)

2、explain关键字 显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

(1)selec_type:查询类型,常见的值[SIMPLE:简单表,不使用表连接或子查询。PRIMARY : 主查询,外层的查询。UNION 第二个或者后面的查询语句。SUBQUERY : 子查询中的第一个select]

(2)table:输出结果的表

(3)type:

从左到右,性能由最差到最好

3.1 type=ALL 全表扫描,

3.2 type=index 索引全扫描,遍历整个索引来查询匹配的行

3.3 type=range 索引范围扫描,常见于 ,>=,between,in等操作符。

3.4 type=ref 使用非唯一索引或唯一索引的前缀扫描,返回匹配某个单独值的记录行。ref还经常出现在JOIN操作中

3.5 type=eq_ref 类似于ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中有一条记录匹配;简单来说,说是多表连接中使用 主建或唯一健作为关联条件

3.6 type=const/system 单表中最多有一个匹配行。主要用于比较primary key [主键索引]或者unique[唯一]索引,因为数据都是唯一的,所以性能最优。条件使用=。

3.7 type=NULL 不用访问表或者索引,直接就能够得到结果

(4)possible_keys:可能使用的索引

(5)Key:实际使用的索引

(6)key_len:索引使用的字节数

(7)ref:关联过程中匹配使用到的列或常量

(8)rows:表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数

(9)Extra:

Using where:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤

Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询

Using filesort:MySQL中无法利用索引完成的排序操作称为“文件排序”

Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。

Impossible where:这个值强调了where语句会导致没有符合条件的行。

Select tables optimized away:这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行

3、无效索引:对于数据变化不大的列,如XX类型,不应该使用索引,因为insert、update、delete操作都需要更新序列,区分度不大,索引效果不明显

4、运算符,!=不走索引,OR两边的条件都需要是索引列否则也不走索引,如果出现OR的一个条件没有索引时,建议使用 union

5、ON后面跟查询条件是先进行删选再进行关联得出查询结果,ON ...WHERE 后面跟查询条件是先通过ON关联出临时表,再通过WHERE后面的条件删选出结果

Mysql知识点整理

标签:性能   index   不可重复读   状态   localhost   错误   共享锁   服务   缓冲区

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:https://www.cnblogs.com/ws-zhuli/p/10838431.html

mysql 全面知识点_Mysql知识点整理相关推荐

  1. mysql中的表连接知识点_Mysql知识点总结

    SQL语句执行流程 MySQL大体上可分为Server层和存储引擎层两部分. Server层: 连接器:TCP握手后服务器来验证登陆用户身份,A用户创建连接后,管理员对A用户权限修改了也不会影响到已经 ...

  2. mysql视图知识点_MySql知识点汇总--笔经面经

    Salary,Allowance}(sigma_{Tname='王华'}(TeacherinftyPosition))ΠSalary,Allowance​(σTna 状态转变为另一个一致状态,也就是需 ...

  3. mysql语句知识点_mysql知识点简单总结

    1.操作数据库语句 1.1 显示所有的数据:show databases; 1.2 创建数据库:create database databasename; 1.3 删除数据库:create datab ...

  4. mysql 创建师徒_mysql基础整理

    (一)几个数据库相关的概念 1.数据库 数据库: 保存有组织数据的容器. 数据的所有存储.检索.管理和处理实际上是有数据库软件DBMS完成的. 我们通过数据库软件DBMS来创建和操纵容器. 2.表 某 ...

  5. mysql case默认_MySQL知识整理10.1—存储过程和函数

    数据科学探路者:MySQL知识整理9-索引​zhuanlan.zhihu.com 一.什么是存储过程? 简单的说,存储过程是一条或者多条SQL语句的集合,可视为批文件,但是其作用不限于批处理. 我们常 ...

  6. mysql碎片处理_mysql碎片整理

    1.为什么整理碎片 经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作--MySQL 数据表碎片整理.每当MySQL从 ...

  7. mysql 一致性读_mysql/mariadb知识点总结(27):一致性读,快照读

    在本博客中,"mysql"是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表. mys ...

  8. MySQL基础教程:知识点汇总

    MySQL常用知识点.函数汇总 MySQL基础教程:知识点汇总_mysql知识点梳理 一文学会使用MYSQL数据库,MySQL常用操作 MySQL数据库表的相关操作 MySQL数据库的基本查询 MyS ...

  9. MySQL复习值代码知识点(1)

    MySQL复习值代码知识点 一. 创建数据库 create database 数据库名: 二. 删除数据库 drop database 数据库名: 三. 选择相应的数据库 use 数据库名: 四. 创 ...

最新文章

  1. 基于深度学习的位姿估计方法
  2. 六、Springmvc json数据交互
  3. GAE 博客——B3log Solo 0.3.5 正式版发布了!
  4. 用c51语言把连续字节做比较,C51优化设计之循环语句(转)
  5. 实现mysql百度式查询_mysql查询优化建议(百度)
  6. 56秒看完131年英格兰顶级联赛冠军排行:利物浦时隔30年再夺冠
  7. 当前主要使用的python版本_动力火车当歌词
  8. 《编写高质量Python代码的59个有效方法》——第19条:用关键字参数来表达可选的行为...
  9. 浅谈C++中的资源管理
  10. 【财富空间】郝景芳:如何不被未来折叠
  11. 计算机VFP基础知识,计算机二级《VFP》考试基础知识:VisualFoxPro基础
  12. 【HTML+CSS】移动端布局之流式布局
  13. ubuntu 自带录屏功能
  14. OSChina 周五乱弹 —— 姑娘在这个节日里表白你接受么?
  15. <Navigate>与useNavigate()
  16. C++判断两个链表是否相交算法
  17. ibm aix_IBM AIX SAN Volume Controller更新和迁移
  18. vue 数字动画递增_数字滚动动画效果 vue组件化
  19. 顶会速递 | ICLR 2020录用论文之元学习篇
  20. 数字图像处理 - Ch2 图像取样与量化

热门文章

  1. 为创世纪图书馆(Library Genesis)作镜像
  2. 11月29日云栖精选夜读:阿里传奇工程师多隆的程序世界
  3. 18岁的他从月薪2000到月薪11000经历了什么?
  4. 从vmware技术团队跳槽到微软技术团队(comlan)
  5. 石大ACM2587解题报告
  6. 田志刚:智慧的员工,个人知识管理
  7. 【6】Zookeeper脚本及API
  8. HTTP 请求头中的 Remote_Addr,X-Forwarded-For,X-Real-IP
  9. JavaScript语言精粹JSON解析器源码阅读
  10. 机器学习-类别不平衡问题