一、什么样的表可以称之为大表
1、记录行数巨大,单表超过两千万行
2、表数据文件巨大,单表数据文件超过10G
二、大表对查询的影响
1、慢查询的产生
在大表中,很难在一定时间内过滤出所需要的数据
2、对DDL操作的影响
建立索引需要很长时间,并且可能引起主从延迟
修改表结构需要长时间锁表,影响正常的数据库操作,并且会造成长时间的主从延迟
三、如何处理数据库中的大表
1、分库分表(不推荐)
分库分表就是把一张大表分成多个小表,但分表后跨分区数据的查询和统计
2、对大表进行历史数据归档
可以减少对前后端业务的影响(因为表结构并没有变化),比如当订单表记录数过多时,就可以对订单表就行数据归档。
在前端可以添加一个历史数据查询入口即可,实现了冷热数据分离,降低了单表容量。
四、简单说下事务
事务就是数据库系统中,一组不可分割的操作单元,所有操作要么全部成功,要么全部失败,不会只成功一部分
1、事务具有4个特性:
(1)原子性
数据库将一个事务内的所有操作视为一个整体,里面的每一个操作要么全部执行成功,要么全部执行失败
这里,小李账户扣减500元和小明账户增加500元两个操作会被视为一个整体,只有两个操作都成功了,这个事务才会提交并成功
(2)一致性
一致性是指数据从一种一致性状态转为另一种一致性状态
(3)隔离性
隔离性指一个事务对数据的修改,在提交该事务之前,对于其他事务,这个修改是不可见的
事务1开始执行,在执行完小李与小明的转账还未提交事务时,事务2开始执行了,这时虽然事务1已经完成了小李和小明的转账,但是因为事务1还未提交,所以事务2读取到的小李账户还是1000元。
注:这种情况下,事务的隔离级别是默认隔离级别,也就是已提交读。
除了已提交读,还有三种隔离级别,下面会介绍。
(4)持久性
持久性指一个事务一旦被提交了,那么对数据库中的数据的修改就是永久性的。
2、事务的四个隔离级别
(1)未提交读
未提交读指事务可以读取到其他事务已经操作但还未提交的数据
(2)已提交读(默认隔离级别)
已提交读隔离级别下,一个事务只能看到其他事务已经提交的操作结果,还没提交的事务相对于该事务而言是不存在的。
(3)可重复读
可重复读隔离级别下,在事务中,同样的一个SQL每次查询结果是相同的,不会因为实际数据发生改变而发生变化。
(4)串行化
事务的执行是串行化的,一个事务没有提交,另一个事务无法开始执行。
实际应用中,串行化隔离级别几乎不会用到
五、什么是大事务
运行时间比较长,操作的数据比较多的事务被称为大事务。
六、大事务带来的问题
锁定太多的数据,造成大量的阻塞和锁超时
回滚时间长
执行时间长,可能造成主从延迟
七、如何处理大事务
1、避免一次处理太多的数据
2、移除不必要在事务中的select操作