Mysql相关数据库

1.InnoDB是MySQL数据库中的一种存储引擎,它采用了多版本并发控制(MVCC)和行级锁定来实现高并发性能和事务支持。下面是InnoDB的架构概述:

  1. 缓冲池(Buffer Pool):InnoDB使用缓冲池来缓存磁盘上的数据页,减少磁盘I/O操作。缓冲池是一个内存区域,存储了常用的数据页,提供快速访问。

  2. 日志系统(Log System):InnoDB有两种类型的日志,分别是重做日志(Redo Log)和回滚日志(Undo Log)。重做日志记录了已经提交的修改操作,用于恢复数据;回滚日志用于回滚未提交的事务。

  3. 索引系统(Index System):InnoDB使用B+树索引结构来组织数据。每个表都有一个主键索引,也可以创建其他辅助索引。索引可以加快数据的查找和排序操作。

  4. 锁管理(Lock Manager):InnoDB使用行级锁定来实现并发控制。它支持多粒度锁定,包括共享锁和排他锁,以及意向锁和自适应锁等机制,提供了更好的并发性能和事务隔离级别。

  5. 并发控制(Concurrency Control):InnoDB使用多版本并发控制(MVCC)来处理并发事务。每个事务都有一个唯一的事务ID,读操作可以读取已提交的数据快照,写操作会创建新的数据版本,并对其他事务提供可见性控制。

  6. 刷新和检查点(Flush and Checkpoint):InnoDB通过周期性地将缓冲池中的脏页刷新到磁盘上的数据文件来保证数据的持久性。同时,也会生成检查点来记录当前的数据库状态,用于恢复和崩溃恢复。

总体而言,InnoDB的架构设计注重事务支持和并发性能。它采用了缓冲池、日志系统、索引系统、锁管理、并发控制等关键技术,为MySQL提供了可靠的存储引擎,适用于高并发的OLTP场景。

2.InnoDB存储引擎的特点?
1、默认存储引擎:在MySQL 5.5版本之后,InnoDB成为了MySQL的默认存储引擎。

2、支持事务:InnoDB是一个支持ACID事务的存储引擎,可以提供数据的一致性和可靠性。

3、行级锁定:InnoDB使用行级锁定来实现并发控制,允许多个事务同时读取和写入不同的行,提高了并发性能。

4、外键约束:InnoDB支持外键约束,可以保证数据的完整性和一致性。

5、支持崩溃恢复:InnoDB具有崩溃恢复机制,可以在数据库异常关闭后进行恢复。

 3.什么是回表查询?

回表的意思就是通过二级索引找到对应的主键值,然后在通过主键值找到聚集索引中所对应的整行数据,这个过程回表 

 

2.6.1. 单表优化
  1. 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

  2. mysql 在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描

  3. is not null 也无法使用索引,但是is null是可以使用索引的

  4. 字符串不加单引号索引失效

组合索引

  1. 全值匹配我最爱

  2. 符合最左原则:不跳过索引中的列。

  3. 如果where条件中是OR关系,加索引不起作用

  4. 范围查询右边的索引条件不走索引

总结

对于单键索引,尽量选择针对当前query过滤性更好的索引在选择组合索引的时候,当前Query中过滤性最好的字段在索引字段顺序中,位置越靠前越好。在选择组合索引的时候,尽量选择可以能够包含当前query中的where字句中更多字段的索引在选择组合索引的时候,如果某个字段可能出现范围查询时,尽量把这个字段放在索引次序的最后面书写sql语句时,尽量避免造成索引失效的情况

2.6.2. 关联查询优化
  1. 保证被驱动表的join字段已经被索引

  2. left/right join 时,选择小表作为驱动表,大表作为被驱动表。

  3. inner join 时,mysql会自己帮你把小结果集的表选为驱动表。

  4. 子查询尽量不要放在被驱动表,有可能使用不到索引。

  5. 能够直接多表关联的尽量直接关联,不用子查询。

2.6.3. 子查询优化

尽量不要使用not in 或者 not exists

2.6.4. 排序优化

ORDER BY子句,尽量使用Index方式排序,避免使用FileSort方式排序

2.6.5. 分组优化

group by 使用索引的原则几乎跟order by一致 ,唯一区别是groupby 即使没有过滤条件用到索引,也可以直接使用索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值