MySQL

MySQL

1.事务

事务的定义

  • 事务指一个任务中由一组sql语句组成,这些SQL语句要么全部执行,要么全部不执行

事务的属性

  • 原子性:事务是业务逻辑单元中不可在分割的,事务开始后所有操作,事务中的多个sql语句,要么同时成功,要么都不执行,不可能停滞在中间环节,

  • 一致性:事务一旦接结束,内存中的数据和数据库中的数据是保持一致的

  • 隔离性:事务之间互不干扰,一个事务的结束意味着下一个事务的开启

  • 持久性:事务一旦提交,则数据持久化到数据库中,永久保存,不能回滚

事务的并发问题

  • 脏读:

    指一个事务正在访问数据,并且对这个数据进行修改,这种修改还没有提交到数据库中,而另一个事务也访问了这个数据,并且使用了这个数据,

    解决方法;一个事务在修改数据时,该数据不能被其他事务访问

  • 不可重复读:

    是指一个事务多次读取同一条记录,如果此时另一个事务也访问,并且修改了该数据,则就会出现多次读取出现数据不一致的情况,原来的数据变成了不可重复读取的数据

    解决方法:只有在修改事务完全提交过后才可以读取到数据

  • 幻读:

    是指一个事务修改表中的多行记录,但是此时另一个事务对该表格进行了插入数据的操作,则第一个事务会发现表格中会出现没有被修改的行,就像发生了幻觉一样.

    解决方法:在一个事务提交数据之前,其他事务不能添加数据

2.索引

  • 概念

    对于数据库来说,索引的作用就是给数据加目录。创建索引的目的就是为了提高查询速度

  • 建立原则

  • 优缺点

    优点:加快了查询的速度

    缺点:降低了增删改的速度,增大了表的文件大小(索引文件甚至可能比数据文件还大)

  • 类型

    普通索引:允许出现相同的索引类容,仅仅是加快了查询的速度

    唯一索引:不可以出现相同的值,可以出现null值

    主键索引:不能重复相同的值,且不能为null,一个表只能有一个主键索引

    全文索引:针对较大的数据,生成全文索引很耗时好空间

    组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。

  • 底层数据结构

  • B+树

  •  

  • 为什么不用B树

  • B+树更适合硬盘存储,由于非叶子节点不存储data,作为索引开销,所以一个节点可以存储更多的内节点,每个节点能索引的范围更大更准确,也就是说使用B+树单次磁盘IO的信息量相比较B树更大,IO效率更高

    MySQL是关系型数据库,经常会按照区间来访问某一个索引列,B+树的叶子节点间按顺序建立了链指针,加强了区间的访问性,所以B+树对索引列上的区间范围查询很友好,而B树每个节点的key

  • 增删改查对所索引的影响

  • 优化SQL查询

    1.使用索引

    使用索引时,应尽量避免全表扫描,首先应考虑在 where 及 order by ,group by 涉及的列上建立索引。

    2.优化SQL语句

    分析查询语句:通过对查询语句的分析,可以了解查询语句执行情况,找出查询语句执行的瓶颈,从而优化查询语句。

    任何地方都不要使用select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

    不在索引列做运算或者使用函数。

    查询尽可能使用 limit 减少返回的行数,减少数据传输时间和带宽浪费。

    3.优化数据库对象

    1)优化表的数据类型

      使用 procedure analyse()函数对表进行分析,该函数可以对表中列的数据类型提出优化建议。表数据类型第一个原则是:使用能正确地表示和存储数据的最短类型。这样可以减少对磁盘空间、内存、CPU缓存的使用。

      使用方法:select * from 表名 procedure analyse();

    2)对表进行拆分

      通过拆分表可以提高表的访问效率。

    4.硬件优化

    1)CPU优化

      选择多核和主频高的CPU。

    2)内存的优化

      使用更大的内存。将尽量多的内存分配给MySQL做缓存。

    3)磁盘I/O的优化

    5.MySQL自身的优化

    对MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。如指定MySQL查询缓冲区的大小,指定MySQL允许的最大连接进程数等

    6.应用优化

    1)使用数据库连接池

     2)实用查询缓存

      它的作用是存储 select 查询的文本及其相应结果。如果随后收到一个相同的查询,服务器会从查询缓存中直接得到查询结果。查询缓存适用的对象是更新不频繁的表,当表中数据更改后,查询缓存中的相关条目就会被清空。

Redis

==============================================================================================================================================================================================================

Redis与MySQL的区别,以及Redis的优势

1.MySQL和Redis的数据库类型

MySQL是关系性数据库,主要用于存放持久化的数据,将数据存储到磁盘中,读取速度慢,

Redis是非关系型数据库,也是缓存数据库,即将数据存放在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限

2.作用上

mysql用于持久化的存储数据到硬盘,功能强大,速度较慢,基于磁盘,读写速度没有Redis快,但是不受空间容量限制,性价比高

redis用于存储使用较为频繁的数据到缓存中,读取速度快,基于内存,读写速度快,也可做持久化,但是内存空间有限,当数据量超过内存空间时,需扩充内存,但内存价格贵

3.需求上

mysql和redis因为需求的不同,一般都是配合使用。

需要高性能的地方使用Redis,不需要高性能的地方使用MySQL。存储数据在MySQL和Redis之间做同步

Redis使用场景

Redis数据类型 数据结构

基本数据的增删改查命令

Redis和数据库的一致性

持久化机制:AOF,RDB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值