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,一经查实,立即删除!

相关文章

软件测试第三次作业

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

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

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

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

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

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

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

面向对象的思想是什么?

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

python编程格式化输出_Python的三种格式化输出

今天刚学了python的三种格式化输出,以前没接触过这么有趣的输出方式,现在来分享一下。#!/user/bin/env python#coding:utf-8#三种格式化输出#第一种格式化输出nameinput("name:")ageinput("age:")jobinput("job:")salaryi…

多线程的异常捕捉

为什么要单独讲多线程的异常捕捉呢?先看个例子: public class ThreadException implements Runnable{Overridepublic void run() {throw new RuntimeException();}//现象:控制台打印出异常信息,并运行一段时间后才停止public stat…

Linux 安装配置JDK 、 MySQL 、nginx

今天我来讲一下在Linux下各环境的搭建,主要就讲一下jdk、MySQL、和一个代理服务器nginx 1、 jdk的安装配置 1)卸载自带openjdk 当我们拿到一个全新的ECS的时候上面有的会自带一个openjdk,但是我们一般不会用这个,所以在这里我们会先卸载这个自…

wat java_并发工具优于wati、notify(69)

现在几乎没有理由在使用wait 和 notify,使用高级工具代替java.util.concurrent 包并发工具分三类:Executor 框架并发集合(concurrent Collection)同步器(synchronizer)并发集合对标准集合接口(List、Map、Queue)封装了高性能的并发实现为了提高并发性&am…

一道关于 fork 的笔试题

题目阅读下面的代码&#xff0c;显示终端会打印出几个 hello world&#xff1f;#include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h>int main() {fork();fork();fork();printf("hello world\n");exit(0); }…

小球游戏1

引用&#xff1a;http://www.oschina.net/code/snippet_12_4121 [图片] pic3.jpg [图片] pic4.jpg [代码] [Java]代码 01public class Player extends AnimatedSprite {02...03Override04 protected void onManagedUpdate(final float pSecondsElapsed) {05 super.…

java怎么调kettle_通过Java调取Kettle的结果集

Kettle端&#xff1a;Data Grid只是测试数据&#xff0c;目的是把数据传递到记录结果。Java端&#xff1a;package com.womai.util;import org.pentaho.di.core.KettleEnvironment;import org.pentaho.di.core.RowMetaAndData;import org.pentaho.di.trans.Trans;import org.pe…

我也确实很向往深圳这种拼搏的精神

今天跟个同学聊天&#xff0c;是关于他的offer选择&#xff0c;他拿了一个不错的外企岗位offer&#xff0c;这个offer的薪资是他现在薪资两倍还多一些&#xff0c;他现在人在外地&#xff0c;年后准备来深圳工作&#xff0c;他在微信说让我给些建议。首先我肯定的是&#xff0c…

中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux

去年 6 月份&#xff0c;中科院大学教授、中科院计算所研究员包云岗&#xff0c;发布了开源高性能 RISC-V 处理器核心 —— 香山。近日&#xff0c;包云岗在社交平台晒出图片&#xff0c;香山芯片已流片&#xff0c;回片后进行了串口调通&#xff0c;1 月 24 日成功运行了 Linu…

java io流操作_十个Demo进行讲解Java中IO流的常用操作~

好久不见的IO流对IO流的学习&#xff0c;我记得还是初学Java基础的时候&#xff0c;后来找工作过程中经常看到有些招聘信息中写到熟悉IO流&#xff0c;现在想想IO流&#xff0c;真的是一脸懵逼&#xff0c;不说这么多废话了&#xff0c;IO流这次好好整理一下。说说IO流的类别在…

这些应用仍未兼容安卓新版本,系统升级后将无法使用

8月7日&#xff0c;谷歌正式发布Android 9 Pie&#xff0c;至今已两月有余。近日&#xff0c;华为终端开放实验室对国内主流应用在Android 9 Pie的兼容性进行测试&#xff0c;结果显示&#xff1a;目前TOP3000应用兼容率已经超过95%&#xff0c;但仍有少量应用存在启动失败、闪…

非常郁闷,WinForm中正常显示的自定义控件无法在WebForm中正常显示!

我写了一个自定义控件(Win Control)&#xff0c;此控件在WinForm中运行正常&#xff0c;但在WebForm中无法显示(在WebForm中此控件并不显示为红叉&#xff0c;但是一个对象图标)。由于没有出现权限或安全方面的提示&#xff0c;因此我从头开始一行一行进行比对&#xff0c;最终…

在家过年这两天|多图

这两天收到了很多朋友的新年祝福&#xff0c;在这里回应下&#xff0c;希望看到这篇文章的朋友们新的一年快乐开心&#xff0c;在求学的人学有所成&#xff0c;在工作的朋友们功成名就&#xff0c;家人健康&#xff0c;吃喝不愁……祝你们㏠㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱…

Eclipse下的项目管理插件介绍

前言 最近,一直学习开源项目的代码,难免会碰到各种版本管理器,作为一名在校大学生,学校的课程完全没提及到,靠着自己的摸索,走了不少弯路,写个列表,望对大家有所帮助.顺便提一下,这里只说客户端,至于服务端,自行根据提供的资料学习 CVS 这里eclipse自带就有,也有一段历史,现在的…

算命

今天大年初三&#xff0c;出了太阳变暖很多&#xff0c;我们带着家里的小朋友一起上街吃早餐。因为明天要去阳西&#xff0c;决定去外婆家看看&#xff0c;在超时买了点东西&#xff0c;走回车上刚好看到路边有算命先生&#xff0c;我就想着来计算一下。我先是问了记算一次多少…