Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
醒狮指南
JavaGuide
提交
456736f2
J
JavaGuide
项目概览
醒狮指南
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
1
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,发现更多精彩内容 >>
提交
456736f2
编写于
6月 09, 2018
作者:
S
Snailclimb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加大表优化内容
上级
8312dce6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
0 deletion
+17
-0
数据存储/MySQL.md
数据存储/MySQL.md
+17
-0
未找到文件。
数据存储/MySQL.md
浏览文件 @
456736f2
Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):
[
https://github.com/Snailclimb/Java_Guide
](
https://github.com/Snailclimb/Java_Guide
)
> ## 书籍推荐
**《高性能MySQL : 第3版》**
...
...
@@ -109,3 +111,17 @@
详细内容可以参考:
[
Mysql锁机制简单了解一下
](
https://blog.csdn.net/qq_34337272/article/details/80611486
)
-
### 大表优化
当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下:
1.
**限定数据的范围:**
务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内。;
2.
**读/写分离:**
经典的数据库拆分方案,主库负责写,从库负责读;
3.
**缓存:**
使用MySQL的缓存,另外对重量级、更新少的数据可以考虑使用应用级别的缓存;
4.
**垂直分区:**
根据数据库里面数据表的相关性进行拆分。例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。垂直分区的优点在于可以使得行数据变小,在查询时减少读取的Block数,减少I/O次数。此外,垂直分区可以简化表的结构,易于维护。
垂直分区的缺点在于主键会出现冗余,需要管理冗余列,并会引起Join操作,可以通过在应用层进行Join来解决。此外,垂直分区会让事务变得更加复杂;
5.
**水平分区:**
保持数据表结构不变,通过某种策略存储数据分片。这样每一片数据分散到不同的表或者库中,达到了分布式的目的。水品分区可以支持非常大的数据量。需要注意的一点是:分表仅仅是解决了单一表数据过大的问题,但由于表的数据还是在同一台机器上,其实对于提升MySQL并发能力没有什么意义,所以水品分区最好分库。水品分区能够支持非常大的数据量存储,应用端改造也少,但分片事务难以解决,跨界点Join性能较差,逻辑复杂。《Java工程师修炼之道》的作者推荐尽量不要对数据进行分片,拆分会带来逻辑、部署、运维的各种复杂度,一般的数据表在优化得当的情况下支撑千万以下的数据量是没有太大问题的。如果实在要分片,尽量选择客户端分片架构,这样可以减少一次和中间件的网络I/O。
详细内容可以参考:
[
MySQL大表优化方案
](
https://segmentfault.com/a/1190000006158186
)
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录