gpt4 book ai didi

mysql - 拥有更多列或更多行更有效?

转载 作者:可可西里 更新时间:2023-11-01 06:47:55 26 4
gpt4 key购买 nike

我目前正在重新设计一个可能包含大量数据的数据库 - 我可以选择在数据库中包含多个不同的列或使用大量行。如果我在下面做一些概述可能会更容易:

item_id | user_id | title | description | content | category | template | comments | status
-------------------------------------------------------------------------------------------
1 | 1 | ABC | DEF | GHI | 1 | default | 1 | 1
2 | 1 | ZYX | | QWE | 2 | default | 0 | 1
3 | 1 | A | | RTY | 2 | default | 0 | 0
4 | 2 | ABC | DEF | GHI | 3 | custom | 1 | 1
5 | 2 | CBA | | GHI | 3 | custom | 1 | 1

与以下结构中的内容相比:

item_id | user_id | attribute   | value
---------------------------------------
1 | 1 | title | ABC
1 | 1 | description | DEF
1 | 1 | content | GHI
... | ... | ... | ...

我可能想在将来创建额外的属性(50 个用于参数)——所以如果使用多列,可能会有很多空单元格。属性名称将在可能的情况下跨不同类型的内容重用 - 例如博客条目、事件和图库 - title 将很容易重用。

所以我的问题是,就查询速度和磁盘空间而言,使用多列或多行效率更高吗?或者你会推荐关系表,所以有一个用于博客的表,一个用于事件的表等。我只是想提出一个易于扩展的解决方案,理想情况下我不想为每一种类型创建一个表内容,因为我正在考虑开发人员通过应用程序/API 系统创建新型内容(属性受到严格控制)。

多行补充问题

在 MySQL 中,我如何将多行转换为可用的列格式(我猜是临时表)- 例如,我可以按内容类型进行一些过滤。

最佳答案

基本上,mysql 具有可变的行长度,只要不更改每个表级别的行长度即可。因此,空列不会使用任何空间(好吧,几乎)。

但是对于 blob 或文本列,最好将它们标准化,因为它们可能有大量数据要存储,并且每次扫描表时都需要读取/跳过这些数据。即使该列不在结果集中并且您在索引之外进行查询,它也会在大量行上花费时间。

作为一个好习惯,我认为将所有管理和经常使用的列放在一个表中并规范化所有其余部分会很快。第二个示例中的一种“垂直”设计阅读起来会很复杂,一旦您使用临时表,您迟早会遇到性能问题。

关于mysql - 拥有更多列或更多行更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com