MYSQL性能调优及架构设计学习笔记-影响MYSQL性能的相关因素之实例分析

为什么80%的码农都做不了架构师?>>>   hot3.png

需求概述

一个简单的讨论区系统,需要有用户,用户组,组讨论区这三部分基本功能

简要分析

1) 须要存放用户数据的表;

2) 须要存放分组信息和用户与组关系的表;

3) 须要存放讨论信息的表

 

解决方案

原始方案一:

分别用4个表来存放用户,用户组,用户与组关系,以及各组的讨论帖子的信息。

user用户表

Field

Type

Null

Key

Default

Extra

id

int11

NO

 

 

nick_name

varchar(32)

NO

 

NULL

 

password

char(64)

YES

 

NULL

 

email

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

int11

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

int11

NO

 

 

nick_name

varchar(32)

NO

 

NULL

 

password

char(64)

YES

 

NULL

 

email

varchar(32)

NO

 

NULL

 

status

varchar(16)

NO

 

NULL

 

 

user_profile用户属性表

Field

Type

Null

Key

Default

Extra

id

int11

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

int11

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷P2089 烤鸡 题解

题目背景 猪猪hanke得到了一只鸡 题目描述 猪猪Hanke特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke吃鸡很特别,为什么特别呢?因为他有10种配料(芥末、孜然等),每种配料可…

java excel 导入 加校验_POI实现excel各种验证和导入的思路总结

制定标准导入总是与导出相辅相成的,无规矩不成方圆。所谓的标准都是大家一同来维护和遵守的,那么首先就是制定一个模板。这样可以减少验证的工作量。例如时间的规范【yyyy-MM-dd】,获取单元格的时间值用下面的方法java.util.Date date cell.g…

在一个公司10年,会怎么样?

大家好,我是写代码的篮球球痴。最近在知乎上看到一个话题那些在一个公司死磕了5-10年的人最后都怎么样了?"在互联网红利爆发,人心躁动的今天,可以在一个公司磕到5~10年,真的很不容易,我记得前东家要是…

公钥私钥

公钥私钥 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />一&#xff0c;公钥私钥 1&#xff0c;公钥和私钥成对出现 2&#xff0c;公开的密钥叫公钥&#xff0c;只有自己知道的叫私钥 3&#xff0c;用公钥加密的数据只有…

软件测试第三次作业

一、开头 (1)合作者&#xff1a;201631062521&#xff0c;201631062421 (2)代码地址&#xff1a;https://gitee.com/h2503652646/WordCount.git (3)本次作业链接地址&#xff1a;https://edu.cnblogs.com/campus/xnsy/Test/homework/2203 二、正文 (1)互审代码情况 已经实现Wor…

equals()与==的区别

“”比较两个变量本身的值&#xff0c;即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。 比如&#xff1a;String s1,s2,s3 "abc", s4 "abc" ;s1 new String("abc");s2 new String("abc");那么&#x…

Linux驱动开发中与设备树相关的6种debug方法

整理出了6种驱动开发时与设备注册、设备树相关的调试方法&#xff0c;彼此间没有优先级之分&#xff0c;每种方法不一定是最优解&#xff0c;但可以作为一种debug查找问题的手段&#xff0c;快速定位问题原因。例如在芯片验证时&#xff0c;不同时钟频率下系统启动情况摸底时&a…

hdu-1877(大数+进制转换)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1877 思路&#xff1a;注意考虑0,0的情况。 #include<iostream> #include<cstdio> #include<string> #include<algorithm> using namespace std; int m,a,b; string s1,s2; string add…

多线程(一)

1) 什么是线程&#xff1f; 线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。程序员可以通过它进行多处理器编程&#xff0c;你可以使用多线程对运算密集型任务提速。比如&#xff0c;如果一个线程完成一个任务要…

DiscoveryService.getRemoteAdvertisements是否会获得本地通告?

从该方法名称上来说&#xff0c;应该是不能获得本地通告&#xff0c;本着探究的精神&#xff0c;首先做个小测试&#xff0c;再从源代码中寻找答案。----------------------------------------------------------------------------- 测试结果&#xff1a;本地通告确实取不到&a…

java ssh 和mvc_JAVA三大框架SSH和MVC

Java—SSH(MVC)JAVA三大框架的各自作用hibernate是底层基于jdbc的orm(对象关系映射)持久化框架&#xff0c;即&#xff1a;表与类的映射&#xff0c;字段与属性的映射&#xff0c;记录与对象的映射 数据库模型 也就是Model;struts提供的丰富标签是用于显示层View;同时struts也充…

Linux的bc命令计算π的值预估系统算力

这是今天突然想到的一个事情&#xff0c;几年前我和一个朋友做一个开发板&#xff0c;然后我们需要完成的这个开发板有算力的要求&#xff0c;当时我们测试的时候就用了一个shell脚本来分析系统的算力。今天我突然想不起这个命令&#xff0c;然后就想写篇文章记录下&#xff0c…

hotmail在outlook2007中的设置

在姓名中输入你的名字&#xff08;用户可自定义&#xff09;&#xff0c;在电子邮件地址中输入你要设置OutLook的电子邮件地址&#xff0c;账户类型设为POP3&#xff0c;接收邮件服务器为pop3.live.com&#xff0c;发送邮件服务器为smtp.live.com。在用户名中输入你的邮箱用户名…

第九章 图形用户界面的并行化(待续)

为什么GUI是单线程的转载于:https://www.cnblogs.com/hzzjj/p/9825864.html

SQL版DNN的安装心得

最重要的是,DNN必须在WEB HOST 的根目录。中国RainBow提醒的。这是装成的关键&#xff01;另外的主要两个问题&#xff0c;一是CONNECTIONSTRING中的PWD有&符号&#xff0c;出错。通过SQL 的企业管理器登陆REMOTE SQL SERVER修改PASSWORD。(应该试一试 Integrated Security…

面向对象的思想是什么?

我同事的回答&#xff0c;我觉得这句话可以读十遍说下我自己的理解你不是人&#xff0c;你是猪。解释一下我们在编写面向对象的代码时&#xff0c;一定要有抽象的思想&#xff0c;什么是抽象&#xff0c;抽象是一种概念的东西&#xff0c;不是实实在在的&#xff0c;看不见摸不…

java 数组正则表达式_java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】...

本文实例讲述了java正则表达式实现提取需要的字符并放入数组。分享给大家供大家参考&#xff0c;具体如下&#xff1a;这里演示java正则表达式提取需要的字符并放入数组&#xff0c;即arraylist数组去重复功能。具体代码如下&#xff1a;package com.test.tool;import java.uti…

多线程(三)

38) 如何在Java中创建Immutable对象&#xff1f;要创建不可变类&#xff0c;要实现下面几个步骤&#xff1a;(1)、通过构造方法初始化所有成员&#xff1b;(2)、对变量不要提供set方法&#xff1b;(3)、将所有的成员声明为私有的&#xff0c;这样就不允许直接访问这些成员&…

安装SQL2005只有配置工具或 错误码是29506 解决方案

在windows7下安装SQL2005时会提示不兼容&#xff0c;需要安装SQL2005 SP3或更高的版本&#xff0c;不用管它&#xff0c;一路安装下去&#xff0c;等装完在开始菜单没有SQL Server Management Studio。 没关系&#xff0c;只要下载微软的“SQL Server Management Studio Expres…

第37课 thinkphp5添加商品基本信息及通过前置钩子上传商品主图 模型事件(勾子函数)...

目录 手册地址:before_insert(新增之前的操作)要实现的功能思路触发条件:1. 控制器里必须要调用模型的save()方式保存数据,用insert()触发不了勾子函数的2. 模型初使化init()里使用 Goods::beforeInsert手册地址: https://www.kancloud.cn/manual/thinkphp5/135195 before_inse…