首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库速度取决于列或行(记录)?

问数据库速度取决于列或行(记录)?
EN

Stack Overflow用户
提问于 2012-10-28 10:22:28
回答 4查看 133关注 0票数 1

我有一个学生实体,现在我想创建一个学生表和一个类似于dob, age, salary的学生属性表。学生属性约为120。

因此,对于表性能和我的MySQL操作,将来哪一个会更好?

选项

  1. 创建一个表(student_mst),将所有学生属性作为具有良好数据类型的列
  2. 或者,使用关系创建两个表(student_mst, student_attributes),并在table - student_attributes.中添加多个学生属性记录
EN

回答 4

Stack Overflow用户

发布于 2012-10-28 10:51:43

这是两种完全不同的方法,因此这完全取决于您希望如何处理数据。如果您选择的模型与您想要访问数据的方式不能很好地工作,那么性能只是一个问题。

第一种选择是,如果所有学生都使用所有或大部分属性,如果有一组固定的属性,则采用自然的方法。

如果学生有不同的属性集,并且您可能会展开属性集,那么第二个选项将是有用的。

使用第一种方法,您通常编写不同的查询来处理不同的属性。例如,很容易得到学生的列表并返回一些属性。示例:

代码语言:javascript
复制
 select StudentId, Name, Age, Class, Grade
 from Students
 order by Age desc

使用第二种方法,您通常会分别获得基本的学生信息和学生属性。要获得一张包含一些属性的学生列表将更加复杂,并且它会建立起您想要得到的更多属性。示例:

代码语言:javascript
复制
 select s.StudentId, Name = a1.Value, Age = a2.Value, Class = a3.Value, Grade = a4.Value
 from Students s
 inner join Attributes a1 on a1.StudentId = s.StudentId
 inner join Attributes a2 on a2.StudentId = s.StudentId
 inner join Attributes a2 on a3.StudentId = s.StudentId
 inner join Attributes a3 on a4.StudentId = s.StudentId
 order by cast(a.Value as int) desc
票数 1
EN

Stack Overflow用户

发布于 2012-10-28 11:03:20

通常,关系数据库中昂贵的操作正在恢复数据集的“行”。也可以通过列进行过滤,这是一种语法糖,可以更好地优化您的最终数据集。因此,试着优化你在线之间安排你的关系的方式,不要太在意列的数量,因为它对搜索性能没有影响,而主要是在“连线上”传输的数据量。

票数 0
EN

Stack Overflow用户

发布于 2012-10-28 11:17:24

@Guffa在回答的基础上再考虑几个问题

如果您确实选择了相关属性表。每个学生的每个属性都要花费一个属性id和一个学生id,如果它们是整数,比如8个字节,那么它们是多么的稀疏是值得考虑的。

可以对120个属性进行分组,可能值得一看。可能是一个属性类型/group和一些1-1扩展表。

如果你只是得到一个学生和他们所有的属性,而不是所有有属性的学生。

如果您计划查询的属性很少,那么xml片段或其他的序列化对象值得一看。

最后,复杂联接查询(不想执行其中的120个:)

您可以将它们转换为支点,或者可以将它们作为两个列返回,这将对您如何映射它们以表示UI产生一定的影响。

对此没有正确的答案,但如果您将模式隐藏在某些方法之后而不是将SQL洒在整个方法的后面,那么在设计中就不一定非要这样做了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13108008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档