关于MYSQL数据库设计性能的两个问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 15:47:50
问题一:比如有“内容一”“内容二”“内容三”...“内容十” 十个内容需要存储,这些内容的长度不超过255字节,更新时间比较频繁,读取时一般是一次性读取的,以下三种方式用哪个好:
1。将十个内容存在一条记录的一个字段中,以分号隔开,读取时对其进行分隔(|内容一|内容二|...|内容十|)(一个text字段)
2。将十个内容分别存在十条记录中,每条记录存一个内容(一个varchar255)
3。将十个内容分别存在一条记录的十个字段中(十个varchar255)

问题二:比如文章列表页面,显示的文章需要的变量中包括“发帖者用户名”“发帖者ID”“回复者用户名”“回复者ID”,会员表中可根据用户ID查找到用户名,在文章表中这四个变量的存储方式选哪个好:
1。只将“发帖者ID”“回复者ID”存在文章表中,读取时再到会员表中查找相关用户名
2。将四个变量都存到文章表中,虽然用户名存在重复,但用户名占用的空间不是很多,读取时只需读取文章表就行

分数不多啊,回者时还请分开回答,谢谢。
问题一为什么选择方法3?这些内容不是同时更新的,也就是说一次只更新一个内容

假如更新的内容(十一)排在前面,那在存储内容十一时直接占用字段一,那字段一二三四...十的内容都得向后移动一个字段,如果内容十一排在后面,那旧的内容都得向前移动一个字段,是不是这样的?

对于问题一:

一般都用方法3,也就是一条记录的10个字段,这便于按个别字段内容进行搜索,也便于修改个别字段内容。

当然方法2存10条记录也可以达到这些目的,甚至数据库结构更加优化,但是这样会把程序弄得非常复杂,只有字段数远远不止十个,或者通常的数据都有许多字段为空的时候才用它。

方法1也是可行的,这在没有按单个字段搜索的需求,而且一般都是同时更改多个字段的情况下适用。

对于问题二:

教科书一般都是让你存储作者ID、回复者ID,具体的名字在用户名称表里面获取,这样可以解决注册用户更换名称、以及用户名称重复的问题,还可以减少数据量,因为一般假设用户的名字可以很长,而ID仅仅是占用4个字节(可以表示两亿多)。

但是在某些情况下可以直接保存用户名字,也就是你的系统要求用户名唯一、不允许更改用户名、对用户名称长度进行限制,我的网站就是有这三个条件,所以我的邮局、论坛、博客都是直接存放用户名称,实际上用户名就是用户表的主键。

问题一:方法3。

问题二:方法1。

虽然用户名占用空间不多,但是随着文章数量增加,其所占空间会成倍增长,数据量大的时候检索所花时间更多,不如单独建一个用户id-名称对应表。