对数据库的部分理解

数据库锁

数据库锁分为乐观锁和悲观锁
乐观锁:提交的所做的修改数据库时才会加锁,完成修改才会释放锁
悲观锁:从数据开始更改时就将数据锁住,知道更改完成才释放
悲观锁又分为表锁、行锁、页锁
表锁和行锁都分为共享锁和排他锁,而更新锁是为了解决行锁升级
innodb 中表锁和行锁一起用,所以为了提高效率才会有意向锁

分区分表

  1. 什么是mysql分表和分区
    分表就是把一张表分成多个小表
    分区就是把一个表分成多个区块,可以在同一磁盘,也可以在不同磁盘

  2. Mysql分表和分区有什么区别?
    1) 实现方式
    (a) 分表是一张表分成多个小表,每个小表都是一张表,都对应三个文件 :
    .MYD:数据文件
    .MYI:索引文件
    .frm:表结构文件
    (b) 分区是一张表分为多个区块,存的数据区块变多,但还是一张表
    2) 数据处理
    (a) 分表后,数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个 的分表里面
    (b) 分区不存在分表,分区只不过把存放数据的文件分成了许多小块,数据处理还是由自己来完成
    3) 提高性能上
    分表后,单表的并发能力提高了
    Mysql分表的三种方式:
    (a) 做 mysql 集群
    (b) 预先估计会出现大数据量并且访问频繁的表,将其分为若干个表
    (c) 利用 merge 存储引擎来实现分表
    (3) 分区类型
    range 分区:基于一个给定的连续区间范围,把数据分配到不同的区
    list 分区:类似于 range 分区,区别在于 list 分区是居于枚举出的值列表分区,range 是基于给定的连续区间范围分区
    hash 分区:基于给定的分区个数,把数据分配到不同的分区
    key 分区:类似于 hash 分区

  3. 应该使用哪一种方式来实施数据库分库分表,这要看数据库中数据量的瓶颈 所在,并综合项目的业务类型进行考虑。
    如果数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、低耦合,那么规则简单明了、容易实施的垂直切分必是首选,而如果数据库中的表并不多,但单表的数据量很大、或数据热度很高,应该选择水平切分

mysql 读写分离

在实际的应用中,绝大部分情况都是读远大于写。Mysql 提供了读写分离的机制,所有的写操作都必须对应到 Master,读操作可以在 Master 和 Slave 机 器上进行, Slave 与 Master 的结构完全一样,一个 Master 可以有多个 Slave,甚 至 Slave 下还可以挂 Slave,通 过此方式可以有效的提高 DB 集群,所有的写操作都是先在 Master 上操 作,然后同步更新到 Slave 上,所以 从 Master 同步到 Slave 机器有一定的延迟,当系统 很繁忙的时候,延迟问题会 更加严重,Slave 机器数量的增加也会使这个问题更加严重

mysql SQL的语句优化

a) 对查询进行优化,应尽量避免全表扫描,首先考虑在where及order by涉及的裂伤建立索引
b) 应尽量避免where字句中使用!=或《》操作,否则将引擎放弃使用索引二进行全表扫描
c) 颖避免在where字句中对字段进行null值判断
d) 应尽量避免在where字句中使用or来连接条件
e) In和not in也要慎用,否则会导致全表扫描
f) 在where字句中使用参数会导致全表扫描。因为SQL只在运行时会解析局部变量
g) 应尽量避免在where字句中读字段进行表达式操作
h) 应尽量避免在where字句中对字段进行函数操作
i) 不要再where字句中的=左边进行函数和运算
j) 使用索引字段作为条件时,日过该索引是复合索引
k) 不要写一些没有意义的查询

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值