MYSQL性能调优及架构设计学习笔记-影响MYSQL性能的相关因素之实例分析
为什么80%的码农都做不了架构师?>>>
需求概述
一个简单的讨论区系统,需要有用户,用户组,组讨论区这三部分基本功能
简要分析
1) 须要存放用户数据的表;
2) 须要存放分组信息和用户与组关系的表;
3) 须要存放讨论信息的表
解决方案
原始方案一:
分别用4个表来存放用户,用户组,用户与组关系,以及各组的讨论帖子的信息。
user用户表
Field |
Type |
Null |
Key |
Default |
Extra |
id |
int(11) |
NO |
|||
nick_name |
varchar(32) |
NO |
NULL |
||
password |
char(64) |
YES |
NULL |
||
|
varchar(32) |
NO |
NULL |
||
status |
varchar(16) |
NO |
NULL |
||
sexuality |
char(1) |
NO |
NULL |
||
msn |
varchar(32) |
YES |
NULL |
||
sign |
varchar(64) |
YES |
NULL |
||
brithday |
date |
YES |
NULL |
||
hobby |
varchar(64) |
YES |
NULL |
||
location |
varchar(64) |
YES |
NULL |
||
description |
varchar(1024) |
YES |
NULL |
groups分组表
Field |
Type |
Null |
Key |
Default |
Extra |
id |
int(11) |
NO |
|||
gmt_create |
datetime |
NO |
NULL |
||
gmt_modified |
datetime |
NO |
NULL |
||
name |
varchar(32) |
NO |
NULL |
||
status |
varchar(16) |
NO |
NULL |
||
description |
varchar(1024) |
YES |
NULL |
user_group关系表
Field |
Type |
Null |
Key |
Default |
Extra |
user_id |
int(11) |
NO |
MUL |
NULL |
|
group_id |
int(11) |
NO |
MUL |
NULL |
|
user_type |
int(11) |
NO |
NULL |
||
gmt_create |
datetime |
NO |
NULL |
||
gmt_modified |
datetime |
NO |
NULL |
||
status |
varchar(16) |
NO |
NULL |
group_message讨论组帖子表
Field |
Type |
Null |
Key |
Default |
Extra |
id |
int(11) |
NO |
NULL |
||
gmt_create |
datetime |
NO |
NULL |
||
gmt_modified |
datetime |
NO |
NULL |
||
group_id |
int(11) |
NO |
NULL |
||
user_id |
int(11) |
NO |
NULL |
||
subject |
varchar(128) |
NO |
NULL |
||
content |
text |
YES |
NULL |
优化后方案二如下
user用户表分成user用户表与user_profile表
group_message讨论组表分成group_message讨论组与group_message_content
user用户表
Field |
Type |
Null |
Key |
Default |
Extra |
id |
int(11) |
NO |
|||
nick_name |
varchar(32) |
NO |
NULL |
||
password |
char(64) |
YES |
NULL |
||
|
varchar(32) |
NO |
NULL |
||
status |
varchar(16) |
NO |
NULL |
user_profile用户属性表
Field |
Type |
Null |
Key |
Default |
Extra |
id |
int(11) |
NO |
|||
sexuality |
char(1) |
NO |
NULL |
||
msn |
varchar(32) |
YES |
NULL |
||
sign |
varchar(64) |
YES |
NULL |
||
brithday |
date |
YES |
NULL |
||
hobby |
varchar(64) |
YES |
NULL |
||
location |
varchar(64) |
YES |
NULL |
||
description |
varchar(1024) |
YES |
NULL |
group_message讨论组帖子表
Field |
Type |
Null |
Key |
Default |
Extra |
id |
int(11) |
NO |
NULL |
||
gmt_create |
datetime |
NO |
NULL |
||
gmt_modified |
datetime |
NO |
NULL |
||
group_id |
int(11) |
NO |
NULL |
||
user_id |
int(11) |
NO |
NULL |
||
subject |
varchar(128) |
NO |
NULL |
||
author |
varchar(32) |
NO |
NULL |
group_message_content帖子内容表
Field |
Type |
Null |
Key |
Default |
Extra |
group_msg_id |
int(11) |
NO |
|||
content |
text |
NO |
NULL |
分析考虑:
1. 从实际出发,一个讨论区系统,访问最多的页面应该是帖子标题列表页面。而帖子标题列表页面最主要的信息都来自于group_message表中,同时帖子标题后面的作者一般都是通过用户名(昵称)来展示。因此:
1) 按照第一种解决方案:
SELECT t.id, t.subject, user.id, u.nick_name
FROM
(
SELECT id, user_id, subject
FROM group_message
WHERE group_id = ?
ORDER BY gmt_modified DESC LIMIT 20
) t, user u
WHERE t.user_id = u.id
2) 按照第二种解决方案:
SELECT t.id, t.subject, t.user_id, t.author
FROM group_message t
HWERE group_id = ?
ORDER BY gmt_modified DESC LIMIT 20
两个查询一比较,打搅就能很明显地看出谁优谁劣了。
2. 由于第一方案中的group_message 表中还包含一个大字段’content’,该字段存放的信息要占整个表的绝大部分存储空间,但在1中表现的最频繁的Query完全不需要该字段所存放的信息,所以,造成了Query读取大量没有任何意义的数据。因此,需要把content字段单独分出来存放在group_message_content帖子内容表中。
转载于:https://my.oschina.net/stream/blog/31997
MYSQL性能调优及架构设计学习笔记-影响MYSQL性能的相关因素之实例分析相关推荐
- MYSQL性能调优及架构设计学习笔记-基础篇MYSQL架构组成
为什么80%的码农都做不了架构师?>>> 目录 小结 MYSQL物理文件组成 MYSQL系统架构 MYSQL自带工具使用介绍 小结 本章主要从逻辑层与物理层两个方面介绍了MYS ...
- MySQL性能调优与架构设计——第4章 MySQL安全管理
第4章 MySQL安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...
- 读《MySQL性能调优与架构设计》笔记之ORDER BY,GROUP BY 和DI STI NCT 优化
1.1. ORDER BY 的实现与优化 在MySQL 中,ORDER BY 的实现有如下两种类型: ◆ 一种是通过有序索引而直接取得有序的数据,这样不用进行任何排序操作即可得到满足客户端要求的有序数 ...
- 《mysql性能调优与架构设计》笔记: 一mysql 架构组成
2019独角兽企业重金招聘Python工程师标准>>> 2.1mysql物理文件组成 2.1.1日志文件: 1,查看mysql配置文件:mysql --verbose --help ...
- 转】MYSQL性能调优与架构设计之select count(*)的思考
原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/5/ 感谢! Posted: Feb 7, 2013 Tag ...
- MySQL性能调优与架构设计——第5章 备份与恢复
第5章 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 MySQL数据库的备 ...
- MySQL性能调优与架构设计——第11章 常用存储引擎优化
第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...
- mysql性能调优 高可用_MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案...
第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...
- mysql性能调优与架构设计_了解架构设计远远不够!一文拆解 Tomcat 高并发原理与性能调优
来源 | 码哥字节 上帝视角拆解 Tomcat 架构设计,在了解整个组件设计思路之后.我们需要下凡深入了解每个组件的细节实现.从远到近,架构给人以宏观思维,细节展现饱满的美.关注「码哥字节」获取更多硬 ...
最新文章
- javascript 判断 前端 是 pc端 还是 移动端
- [排序算法] 选择排序(2种)
- Python用selenium简单方法处理完子窗口切换到主窗口
- lvm 扩展根目录_Linux下lvm在线扩容步骤
- git批量删除没用的远程分支
- VREP中的力触觉设备接口(CHAI3D)
- keynote代码高亮【转】
- qt messagebox退出程序_Qt多线程创建
- 用户使用DocConvert处理文档后对DocConvert的评价
- uniapp拍照上传照片流程笔记
- 波长光电IPO过会:年营收3亿 黄胜弟与朱敏夫妇是实控人
- 计算机桌面如何整理,怎么整理电脑桌面
- 什么是响应式布局设计?
- 四种xml的解析方式
- 一文搞定贷款利息计算
- npm login e401问题(npm ERR! Unable to authenticate, need: BASIC realm=“Sonatype Nexus Repository Mana)
- 云计算技术基础【15】
- 程序人生:每天工作的第一个小时,做什么?
- 【子网划分】求子网网络前缀、子网地址、每个子网可以分配给主机使用的最小地址和最大地址
- JAVA主方法(main)方法解释
热门文章
- 算法(9)--两个数的最大公约数
- linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg
- 以太坊账户 相关知识
- Linux操作系统监视NVIDIA的GPU使用情况
- Ubuntu12.10中安装ati显卡驱动amd driver 13.1
- 腾讯CKV海量分布式存储系统
- 如何检测C语言中的内存漏洞(leak)?
- linux下gdb单步调试
- 芯片支持的且会被用到的H.264特性 预测编码基本原理
- 解决:which: no java in (/root/chengxu/maven/apache-maven-3.5.2/bin:/usr/local/sbin:/usr/local/bin:/usr