commit 16a0fca1f15fa0f2df573ada4ab12ace793e7676 Author: lixicai <1210922622@qq.com> Date: Wed Mar 29 23:31:21 2023 +0800 2023年3月29日23:31:10 diff --git a/MySQL性能调优与架构设计.md b/MySQL性能调优与架构设计.md new file mode 100644 index 0000000..0fd8abf --- /dev/null +++ b/MySQL性能调优与架构设计.md @@ -0,0 +1,112 @@ +## 1.范式化设计 + +###六种范式: + +【第一范式】:字段不可再分 + +【第二范式】:要求实体的属性完全依赖于主关键字(主键唯一性) + +【第三范式】:要求数据不能存在传递关系,即每个属性都和主键有直接关系,而不是间接关系 + +【巴斯-科德范式】: + +【】 + +###范式一定好吗? + +范式的好处就是在进行表设计的时候非常的规范。但是会对查询性能有影响,于是就提出了反范式化设计。 + +### 反范式化设计 + +为了性能和读取效率而适当的违反对数据库设计范式的要求。 + +为了查询性能允许存在部分冗余数据。 + + + +![1680098978943](.\img\1680098978943.png) + +## 项目中常见的反范式实现 + +1.缓存与汇总数据 + +2.计数器表设计 + + MySQL处理计数器高并发场景,用槽的设计,为一个实例做多行记录 + +## 字段数据类型优化-整数与实数 + +基本原则: + +- 更小的通常更好 +- 简单就好 +- 尽力避免null + +因为更小的字段,一般会有更少的处理时间 + +null对于索引、索引统计会更复杂。可为null 占用更多空间,null列为索引还会额外占用一个字节 + +具体类型: + +- 整数类型: + + tinyint[8bit=1byte] 、smalint[16bit=2byte]、mediumint[24bit=3byte]、int[32bit=4byte]、bigint[64bit=8byte] + +- 实数类型: + + float、double、decimal[能存最多65个数字,实现是通过字符串存储的] + +- 字符串类型: + + char【定长,更省空间,没有记录长度】、varchar【不定长,1-2个额外字节来记录字符串的长度】、blob【用二级制存,不存在字符集排序】、text【字符存,有字符集排序】、enum、set + +- 日期和时间类型 + + datetime(1001-9999年, 跟时区无关)、timestamp(1970-2038年,跟时区有关系) + +int的【长度】只影响命令行的显示,Int(1)与Int(11)是在数据存储上都是一样的。 + +字符串列,最大长度比平均长度大很多的情况用varchar,否则用char + +从存储的角度: + +‘hello'->char(5) varchar(200) 存储开销是一样的。 + +blob和text这种大字段一般:单独到一张表里面,通过这张表的主键来关联 + +datetime和timestamp都只能存储到秒。 + +### 数据量特别大,实数来存储,确保精读,确保效率,怎么办? + +业务上来设计:bigint,数据放大100倍,确保两位精读。 + +## 命名规范 + +- 可读性原则 +- 必须使用小写字母加下划线 +- 不使用复数名词 +- 禁用保留字 +- 索引命名 + +1.表的命名不建议使用缩写 + +一般格式:业务名称_表的作用,如biz_order + +2.索引命名 + +一般格式:主键索引pk\_字段名 唯一索引uk\_字段名 idx\_字段名 + +## 索引是什么? + +### 哈希索引的弊端 + +范围查找? 只能一个一个精确查找 + +索引排序? 文件排序或者其他排序方式 + +组合索引? 不能实现前缀匹配 + +hash冲突? + +### B+Tree索引 + diff --git a/img/1680098978943.png b/img/1680098978943.png new file mode 100644 index 0000000..2adf625 Binary files /dev/null and b/img/1680098978943.png differ diff --git a/沟通和提问.md b/沟通和提问.md new file mode 100644 index 0000000..eb94a4d --- /dev/null +++ b/沟通和提问.md @@ -0,0 +1,50 @@ +## 提问的智慧 + +### 1.概念引入 + +### 2.使用专业术语 + +尽量使用行业专业词汇,不要自己造词汇,难以理解,单也不要过度使用专业词汇,会造成简单的问题描述变成一个学术论文,核心思想:表述语言专业,同时兼顾通俗易懂。 + + !!有这个意识即可,慢慢养成用专业术语的习惯 + +### 3.准确具体的描述问题 + +应当具体问题具体分析,语言清晰准确并且注意断句。 + +### 4.提供分析材料 + +问自己一个问题:如果是你自己在给别人解决问题,针对这个问题,我应该看到什么? + +换位思考。 + +​ 1.分析资料要完整 + +​ 2.按照事件的逻辑顺序 + +​ 3.代码截图带上代码行数 + +​ 4.最好可以在截图上做一些特殊标记 + +​ 5.如果直接发送代码,请注意简单排版 + +​ 6.必要时介绍运行环境jdk版本 编辑工具 使用插件 服务器环境... .. + +​ 7.其他条件 + +## 5.学习查看日志 + +注意第一个异常信息,和最后一个异常信息,注意Cause by后面的东西。 + +博客和工具网站:CSDN,菜鸟网, + +出现问题最好根据关键字查阅至少3篇文章阅读,增加自己的谈资和知识面。 + +## 6.线上教育平台的介绍 + + + + + + +