MYSQL性能调优及架构设计学习笔记-影响MYSQL性能的相关因素之实例分析
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
需求概述
一個(gè)簡單的討論區(qū)系統(tǒng),需要有用戶,用戶組,組討論區(qū)這三部分基本功能
簡要分析
1) 須要存放用戶數(shù)據(jù)的表;
2) 須要存放分組信息和用戶與組關(guān)系的表;
3) 須要存放討論信息的表
?
解決方案
原始方案一:
分別用4個(gè)表來存放用戶,用戶組,用戶與組關(guān)系,以及各組的討論帖子的信息。
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關(guān)系表
| 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 | ? |
?
?
?
?
?
?
?
?
?
優(yōu)化后方案二如下
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帖子內(nèi)容表
| Field | Type | Null | Key | Default | Extra |
| group_msg_id | int(11) | NO | ? | ? | |
| content | text | NO | ? | NULL | ? |
?
分析考慮:
1.?從實(shí)際出發(fā),一個(gè)討論區(qū)系統(tǒng),訪問最多的頁面應(yīng)該是帖子標(biāo)題列表頁面。而帖子標(biāo)題列表頁面最主要的信息都來自于group_message表中,同時(shí)帖子標(biāo)題后面的作者一般都是通過用戶名(昵稱)來展示。因此:
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
?? 兩個(gè)查詢一比較,打攪就能很明顯地看出誰優(yōu)誰劣了。
2.?由于第一方案中的group_message 表中還包含一個(gè)大字段’content’,該字段存放的信息要占整個(gè)表的絕大部分存儲(chǔ)空間,但在1中表現(xiàn)的最頻繁的Query完全不需要該字段所存放的信息,所以,造成了Query讀取大量沒有任何意義的數(shù)據(jù)。因此,需要把content字段單獨(dú)分出來存放在group_message_content帖子內(nèi)容表中。
轉(zhuǎn)載于:https://my.oschina.net/stream/blog/31997
總結(jié)
以上是生活随笔為你收集整理的MYSQL性能调优及架构设计学习笔记-影响MYSQL性能的相关因素之实例分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 25个优秀的设计机构网站设计案例
- 下一篇: linux cmake编译源码,linu