这些表模式中的哪一个最适合性能(列与行)?

Which of those Tables Schema is Best for Performance (Columns vs. Rows)?

我必须使用 Table 模式中的两个之一,

First Schema:

SELECT * 
FROM `posts` 
WHERE `id` = '1'
     ----
id  title   content     col1    col2    col3
1   Title1  Content1    A       B       C

Second Schema:

SELECT p.*, GROUP_CONCAT(c.`col` ORDER BY `col_number`) AS cols 
FROM `posts` p
LEFT JOIN `cols` c ON c.`pid` = p.`id`
WHERE p.`id` = 1;
     ----
id  title   content     cols
1   Title1  Content1    A,B,C

在这两种情况下,对于 post table 中的每个 记录 ,我仅限于 three cols,并且会像这样收集它们array 第二个模式 A,B,C

在性能上使用哪种架构重要吗?

我知道的是:

第一个架构 可以在 col2, col3 上有 NULL

Second Schema 将没有 NULL cols 除非某些列在 value 之前更新为 NULL 除了 col_number = 1ROW.


在这两种情况下,它们都有 NULL cols 值,Second Schema NULL cols 可以是 DELETED,但我没有知道是保留它还是 DELETE 它们更好。


简要说明:哪种 Schema 更适合性能?将 NULL col 保留在 Second SchemaDELETE 中更好吗?

永远不要将事物列表存储为分隔字符串。时期。您可以将它们存储为 JSON 或 XML 或使用其他方法,但在字符串中存储多个值是个坏主意。

因此,第一种方法是更好的方法。在性能方面,两者对于基本查询应该非常相似。第一个允许您在每个列上创建索引,这对某些目的很有帮助。

space 用法非常相似。您正在谈论字符串与定界符的长度字节。

但是对于关系建模,没有问题。单独的列 - 甚至关联中的单独行 table - 是正确的解决方案。