Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Coudy Hou
JavaGuide
提交
db0b4eb3
J
JavaGuide
项目概览
Coudy Hou
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
db0b4eb3
编写于
6月 18, 2018
作者:
S
Snailclimb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新MySQL内容
上级
55c044c2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
6 deletion
+29
-6
数据存储/MySQL.md
数据存储/MySQL.md
+29
-6
未找到文件。
数据存储/MySQL.md
浏览文件 @
db0b4eb3
...
...
@@ -41,7 +41,7 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
-
### ③索引相关的内容(数据库使用中非常关键的技术,合理正确的使用索引可以大大提高数据库的查询性能)
Mysql索引使用的数据结构主要有
BTree索引和哈希索引
。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。
Mysql索引使用的数据结构主要有
**BTree索引**
和
**哈希索引**
。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。
Mysql的BTree索引使用的是B数中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。
...
...
@@ -57,12 +57,14 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
-
### ④查询缓存的使用
my.cnf加入以下配置,重启Mysql开
机
查询缓存
my.cnf加入以下配置,重启Mysql开
启
查询缓存
```
query_cache_type=1
query_cache_size=600000
```
Mysql执行以下命令也可以开启查询缓存
```
set global query_cache_type=1;
set global query_cache_size=600000;
...
...
@@ -87,7 +89,7 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
3.
**隔离性:**
并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;
4.
**持久性:**
一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库 发生故障也不应该对其有任何影响。
**为了达到上述事务特性,数据库定义了几种不同的事务隔离级别:**
**为了达到上述事务特性,数据库定义了几种不同的事务隔离级别:**
-
**READ_UNCOMMITTED(未授权读取):**
最低的隔离级别,允许读取尚未提交的数据变更,
**可能会导致脏读、幻读或不可重复读**
-
**READ_COMMITTED(授权读取):**
允许读取并发事务已经提交的数据,
**可以阻止脏读,但是幻读或不可重复读仍有可能发生**
...
...
@@ -100,7 +102,7 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
详细内容可以参考:
[
可能是最漂亮的Spring事务管理详解
](
https://blog.csdn.net/qq_34337272/article/details/80394121
)
-
### ⑥锁机制
-
### ⑥锁机制
与InnoDB锁算法
**MyISAM和InnoDB存储引擎使用的锁:**
-
MyISAM采用表级锁(table-level locking)。
...
...
@@ -114,8 +116,21 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
详细内容可以参考:
[
Mysql锁机制简单了解一下
](
https://blog.csdn.net/qq_34337272/article/details/80611486
)
-
### ⑦大表优化
当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下:
**InnoDB存储引擎的锁的算法有三种:**
-
Record lock:单个行记录上的锁
-
Gap lock:间隙锁,锁定一个范围,不包括记录本身
-
Next-key lock:record+gap 锁定一个范围,包含记录本身
**相关知识点:**
1.
innodb对于行的查询使用next-key lock
2.
Next-locking keying为了解决Phantom Problem幻读问题
3.
当查询的索引含有唯一属性时,将next-key lock降级为record key
4.
Gap锁设计的目的是为了阻止多个事务将记录插入到同一范围内,而这会导致幻读问题的产生
5.
有两种方式显式关闭gap锁:(除了外键约束和唯一性检查外,其余情况仅使用record lock) A. 将事务隔离级别设置为RC B. 将参数innodb_locks_unsafe_for_binlog设置为1
-
### ⑦大表优化
当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下:
1.
**限定数据的范围:**
务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内。;
2.
**读/写分离:**
经典的数据库拆分方案,主库负责写,从库负责读;
...
...
@@ -148,6 +163,13 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
-
**客户端代理:**
**分片逻辑在应用端,封装在jar包中,通过修改或者封装JDBC层来实现。**
当当网的
**Sharding-JDBC**
、阿里的TDDL是两种比较常用的实现。
-
**中间件代理:**
**在应用和数据中间加了一个代理层。分片逻辑统一维护在中间件服务中。**
我们现在谈的
**Mycat**
、360的Atlas、网易的DDB等等都是这种架构的实现。
详细内容可以参考:
[
MySQL大表优化方案
](
https://segmentfault.com/a/1190000006158186
)
> 欢迎关注我的微信公众号:"**Java面试通关手册**"(一个有温度的微信公众号,无广告,单纯技术分享,期待与你共同进步~~~坚持原创,分享美文,分享各种Java学习资源。)
最后,就是使用阿里云服务器一段时间后,感觉阿里云真的很不错,就申请做了阿里云大使,然后这是
[
我的优惠券地址
](
https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=hf47liqn&utm_source=hf47liqn
)
.
![
我的公众号
](
https://user-gold-cdn.xitu.io/2018/5/25/16396cf05d1f4fbf?w=180&h=234&f=png&s=28541
)
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录