MySQL调优的需要知道的基础点

本文探讨了MySQL数据库中的关键实践,包括使用固定字段以保留历史数据,采用NOTNULL约束提升查询效率,以及如何通过二级索引优化SELECT和UPDATE语句。解释了从FROM到LIMIT的SQL执行顺序,并详细解析了一级索引(主键)和二级索引(非主键)的区别。此外,还介绍了乐观锁和悲观锁的事务管理策略,以及死锁的预防方法。内容涵盖了数据库设计、性能调优和锁机制等多个方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一问:为什么要使用固定字段?

    1. 逻辑删除字段,行业共识,数据库不允许物理删除数据,哪怕是错误数据,
       错误数据也是有一定价值的。然后可快速恢复,就是数据库的手动后悔药。
    2. 创建人,对于数据的掌控,很重要,谁创建的,一般使用在后台管理中较多。
    3. 创建时间,对于数据的掌控 数据何时进入数据库 很重要。
    4. 更新时间,对于数据的掌控 数据何时更 也很重要。
    5. 备注字段,数据库一般都会涉及到手动修改,或者间接关联,都可使用这个字段标注。

第二问:为什么建议使用 NOT NULL 限制列属性?

    1. 读取数据的时候, 会带来大量的数据非空检查, 否则抛出NullPointException。
    2. NULL值列和其他列进行操作可能引发错误,或者意外,如统计不正确,对NULL值得判断无法使用到索引,也不能直接比较。
    3. NULL值到非NULL的更新无法做到原地更新,更容易发生索引分裂,从而影响性能。
    4. Mysql难以优化引用可空列查询,它会使索引、索引统计和值更加复杂。
        可空列需要更多的存储空间,还需要mysql内部进行特殊处理。可空列被索引后,
        每条记录都需要一个额外的字节,还能导致MYisam 中固定大小的索引变成可变大小的索引 --出自《高性能Mysql》

第三问:为什么select,update 语句的 where后的条件应该创建二级索引?

    1. 查询快。
    2. mysql行锁是加在索引上的,使用索引 可增加并发性能,减少锁争用情况。
    3. 尽量使用主键去做更新,查询;在使用二级索引更新时候,可能出现next-key 锁,造成锁住多余的行( 在8.0.19版本中 已修复)

第四问:select from join where group by order by limit mysql语法执行顺序?

    from
    join   不要关联太多
    where  不要在 = 号左边做表达式计算,不要使用!=,
    select
    group  性能开销大头,可能涉及文件系统排序,创建临时表
    order  性能开销大头,可能涉及文件系统排序,涉及到创建时间排序,可考虑使用id代替,非常不建议对非驱动表字段进行排序
    limit  请多用limit

第五问:什么是一级索引,什么是二级索引?

    INNODB:聚簇索引,一级索引:主键索引,索引上存储数据;二级索引:非主键索引,索引上存储主键。
    MYISAM:非聚簇索引,索引上存储数据指针
    MySQL 索引结构(MyISAM的有错误,应该是索引上存储指针)

在这里插入图片描述

MySQL千万级的索引树,高度在3-5 层

第六问:MYSQL锁机制

   乐观锁: 事务执行到哪就申请哪的资源的锁
   悲观锁: 事务开始先申请锁住需要的全部资源
   全局事务读锁: MYSQL最强锁 flush table with read lock
   表锁:
   页锁:磁盘与内存数据交互时候使用到
   行锁:
   元数据锁:DDL DML 产生
   间隙所: 锁住俩条记录之间的间隙
   记录锁: 行锁
   next-key:间隙所+记录锁
   备份锁: 8.0 备份时候使用
   S锁 共享锁,加锁读的情况。 
   	  (意向锁作用,A事务正在加锁修改a表的一行数据,B事务现在想修改整个a表的数据,如果没有意向锁,
        则B的事务需要判断表中的每一行是否已被行锁锁住,效率奇差,而有了意向锁,只需要判断表是否存在意向锁,
        便可,解决了行锁,表锁同时存在的时候的锁的效率问题)
   X锁 排它锁
   IS锁 属于表锁,属于共享锁
   IX锁 属于表锁,属于共享锁
死锁:俩个事务相互锁住了对方需要的锁资源。
   避免死锁的方式: 越是轻量的事务,占有越少的锁资源,这样发生死锁的几率就越小,不同事务中,表的更新顺序应当一致。
                  尽量按主键更新数据。mysql有死锁检测线程,会放弃影响小的事务。

内容来自小伙伴建议!推荐一下系统故障修复篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值