欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL 实用基础

程序员文章站 2022-03-23 19:02:19
第一问:为什么要使用固定字段?逻辑删除字段,行业共识,数据库不允许物理删除数据,哪怕是错误数据,错误数据也是有一定价值的。然后可快速恢复,就是数据库的手动后悔药。创建人,对于数据的掌控,很重要,谁创建的,一般使用在后台管理中较多。创建时间,对于数据的掌控 数据何时进入数据库 很重要。更新时间,对于数据的掌控 数据何时更 也很重要。备注字段,数据库一般都会涉及到手动修改,或者间接关联,都可使用这个字段标注。第二问:为什么建议使用 NOT NULL 限制列属性?读取.....

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

  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语法执行顺序?

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

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

  1. INNODB:聚簇索引,一级索引:主键索引,索引上存储数据;二级索引:非主键索引,索引上存储主键。
  2. MYISAM:非聚簇索引,索引上存储数据指针

MySQL 索引结构(MyISAM的有错误,应该是索引上存储指针)

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

第六问:MYSQL锁机制

  1. 乐观锁: 事务执行到哪就申请哪的资源的锁
  2. 悲观锁: 事务开始先申请锁住需要的全部资源
  3. 全局事务读锁: MYSQL最强锁 flush table with read lock
  4. 表锁:
  5. 页锁:磁盘与内存数据交互时候使用到
  6. 行锁:
  7. 元数据锁:DDL DML 产生
  8. 间隙所: 锁住俩条记录之间的间隙
  9. 记录锁: 行锁
  10. next-key:间隙所+记录锁
  11. 备份锁: 8.0 备份时候使用
  12. S锁 共享锁,加锁读的情况。 (意向锁作用,A事务正在加锁修改a表的一行数据,B事务现在想修改整个a表的数据,如果没有意向锁,则,B的事务需要判断表中的每一行是否已被行锁锁住,效率奇差,而有了意向锁,只需要判断表是否存在意向锁,便可,解决了行锁,表锁同时存在的时候的锁的效率问题)
  13. X锁 排它锁
  14. IS锁 属于表锁,属于共享锁
  15. IX锁 属于表锁,属于共享锁

死锁:俩个事务相互锁住了对方需要的锁资源。

  1. 避免死锁的方式: 越是轻量的事务,占有越少的锁资源,这样发生死锁的几率就越小,不同事务中,表的更新顺序应当一致。尽量按主键更新数据。mysql有死锁检测线程,会放弃影响小的事务。

第七问:MYSQL学习推荐几个公众号

  1. 老叶茶馆
  2. MySQL技术
  3. 数据库SQL
  4. 数据库随笔
  5. 爱可生开源社区
  6. pinCAP
  7. 阿里巴巴数据库技术
  8. 腾讯数据库技术
  9. 腾讯云数据库
  10. 巨衫数据库

本文地址:https://blog.csdn.net/qq_32682305/article/details/107310388