mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
更新MySQL内容
This commit is contained in:
parent
55c044c297
commit
db0b4eb304
@ -41,7 +41,7 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
|
|||||||
|
|
||||||
- ### ③索引相关的内容(数据库使用中非常关键的技术,合理正确的使用索引可以大大提高数据库的查询性能)
|
- ### ③索引相关的内容(数据库使用中非常关键的技术,合理正确的使用索引可以大大提高数据库的查询性能)
|
||||||
|
|
||||||
Mysql索引使用的数据结构主要有BTree索引和哈希索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。
|
Mysql索引使用的数据结构主要有**BTree索引** 和 **哈希索引** 。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。
|
||||||
|
|
||||||
Mysql的BTree索引使用的是B数中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。
|
Mysql的BTree索引使用的是B数中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。
|
||||||
|
|
||||||
@ -57,12 +57,14 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
|
|||||||
|
|
||||||
- ### ④查询缓存的使用
|
- ### ④查询缓存的使用
|
||||||
|
|
||||||
my.cnf加入以下配置,重启Mysql开机查询缓存
|
my.cnf加入以下配置,重启Mysql开启查询缓存
|
||||||
```
|
```
|
||||||
query_cache_type=1
|
query_cache_type=1
|
||||||
query_cache_size=600000
|
query_cache_size=600000
|
||||||
```
|
```
|
||||||
|
|
||||||
Mysql执行以下命令也可以开启查询缓存
|
Mysql执行以下命令也可以开启查询缓存
|
||||||
|
|
||||||
```
|
```
|
||||||
set global query_cache_type=1;
|
set global query_cache_type=1;
|
||||||
set global query_cache_size=600000;
|
set global query_cache_size=600000;
|
||||||
@ -100,7 +102,7 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
|
|||||||
|
|
||||||
详细内容可以参考: [可能是最漂亮的Spring事务管理详解](https://blog.csdn.net/qq_34337272/article/details/80394121)
|
详细内容可以参考: [可能是最漂亮的Spring事务管理详解](https://blog.csdn.net/qq_34337272/article/details/80394121)
|
||||||
|
|
||||||
- ### ⑥锁机制
|
- ### ⑥锁机制与InnoDB锁算法
|
||||||
**MyISAM和InnoDB存储引擎使用的锁:**
|
**MyISAM和InnoDB存储引擎使用的锁:**
|
||||||
|
|
||||||
- MyISAM采用表级锁(table-level locking)。
|
- MyISAM采用表级锁(table-level locking)。
|
||||||
@ -114,7 +116,20 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
|
|||||||
详细内容可以参考:
|
详细内容可以参考:
|
||||||
[Mysql锁机制简单了解一下](https://blog.csdn.net/qq_34337272/article/details/80611486)
|
[Mysql锁机制简单了解一下](https://blog.csdn.net/qq_34337272/article/details/80611486)
|
||||||
|
|
||||||
|
**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性能会明显下降,一些常见的优化措施如下:
|
当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下:
|
||||||
|
|
||||||
1. **限定数据的范围:** 务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内。;
|
1. **限定数据的范围:** 务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内。;
|
||||||
@ -148,6 +163,13 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
|
|||||||
- **客户端代理:** **分片逻辑在应用端,封装在jar包中,通过修改或者封装JDBC层来实现。** 当当网的 **Sharding-JDBC** 、阿里的TDDL是两种比较常用的实现。
|
- **客户端代理:** **分片逻辑在应用端,封装在jar包中,通过修改或者封装JDBC层来实现。** 当当网的 **Sharding-JDBC** 、阿里的TDDL是两种比较常用的实现。
|
||||||
- **中间件代理:** **在应用和数据中间加了一个代理层。分片逻辑统一维护在中间件服务中。** 我们现在谈的 **Mycat** 、360的Atlas、网易的DDB等等都是这种架构的实现。
|
- **中间件代理:** **在应用和数据中间加了一个代理层。分片逻辑统一维护在中间件服务中。** 我们现在谈的 **Mycat** 、360的Atlas、网易的DDB等等都是这种架构的实现。
|
||||||
|
|
||||||
|
|
||||||
详细内容可以参考:
|
详细内容可以参考:
|
||||||
[MySQL大表优化方案](https://segmentfault.com/a/1190000006158186)
|
[MySQL大表优化方案](https://segmentfault.com/a/1190000006158186)
|
||||||
|
|
||||||
|
> 欢迎关注我的微信公众号:"**Java面试通关手册**"(一个有温度的微信公众号,无广告,单纯技术分享,期待与你共同进步~~~坚持原创,分享美文,分享各种Java学习资源。)
|
||||||
|
|
||||||
|
最后,就是使用阿里云服务器一段时间后,感觉阿里云真的很不错,就申请做了阿里云大使,然后这是[我的优惠券地址](https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=hf47liqn&utm_source=hf47liqn).
|
||||||
|
|
||||||
|
|
||||||
|

|
Loading…
x
Reference in New Issue
Block a user