MySQL知识点整理

事务四要素ACID:

原子性:事务操作原子性,要么全部成功要么全部失败事务回滚

一致性:事务发生的前后必须保持完整,如果事务失败系统要自动撤回

隔离性:同一时间只允许一个事务请求同一数据,事务之间不受干扰

持久性:事务完成后数据保存在数据库不会回滚和丢失

 

事务隔离级别:

 脏读不可重复读幻读
未提交读
已提交读×
可重复读××
串行化×××

未提交读:允许脏读,可以读取到其他事务未提交的数据

已提交读:只能读取已提交了的数据

可重复读:同一事务内的查询都跟一开始是一致的,不会受到其他事务的影响

串行化:读写相互阻塞,每次读取都会给表加锁

隔离级别的等级逐级增加,相应的性能消耗也逐级增大

 

脏读:一个事务修改了数据但没有提交,另一个事务可以读取到修改的数据

不可重复读:两个事务同时读取到了数据,其中一个修改了,另一个事务再次读取的时候发现与第一次读取不一样

幻读:体现在数据量变化,一个事务的两次读取的时候,由于另一个事务增加或删除了数据,导致两次读取的时候数据量不一致

 

优化:

1.字段类型,尽量按需来定:

    (1)无符号数用unsigned

    (2)能用char就不用varchar,能用varchar不用text。char会预先分配空间,varchar不会预先分配空间,最大长度5000

    (3)有小数用decimal,float和double会损失精度

2.若字段变动频率很低但查询频繁考虑冗余,超长的varchar字段和text字段尽量不做冗余

3.多个字段组成唯一的建组合索引,区分度最高的放最左边

4.join表连接的数据类型保持一致,否则会做转换,降低效率,原则上不超过3个

5.varchar建立索引指定索引长度,没必要做全字段的索引

6.索引失效的情况:

    (1)最佳左前缀法则,组合索引未使用最左前缀,查询要从索引的最左前列开始并且不跳过索引中的列,即A、B列做组合索引,查询只用B列时索引失效

    (2)mysql认为全表扫描比索引更快时不使用

    (3)索引列上存在以下操作时:函数、or、in、!=、全模糊、左模糊、is null、between,例外:如果or的所有列都是索引是会生效的

    (4)对于字符串要加引号,否则会做隐式转换不用索引

5.尽量使用覆盖索引,减少select * ,要什么字段就取什么字段

6.统计时使用count(*),不要用count(1)或count(具体列),count(具体列)不会统计NULL值的列。count(distinct col)统计除NULL外不重复行数,如果是多列,其中一列是NULL也不统计

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值