我必须选择两个表模式之一,
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
在这两种情况下,我都仅限于 three cols
对于 post
中的每条记录表,并将像array
一样收集它们如第二个架构 A,B,C
性能上使用哪种模式重要吗?
我所知道的是:
第一个架构可以有 NULL
上col2, col3
.
第二个架构将没有 NULL cols
除非某些列已更新为 NULL
拥有value
之后之前除了col_number = 1
的ROW
.
在这两种情况下,它们都会有 NULL cols
值,第二个架构 NULL cols
可以是DELETED
,但不知道是保留好还是DELETE
他们。
简单地说:哪种架构性能更好?保留NULL col
是不是更好?在第二架构或DELETE
中他们?
最佳答案
您永远不应该将事物列表存储为分隔字符串。时期。您可以将它们存储为 JSON 或 XML 或使用其他方法,但在字符串中存储多个值是一个坏主意。
因此,第一种方法是更好的方法。就性能而言,对于基本查询,两者应该非常相似。第一个允许您在每列上创建索引,这对于某些目的很有帮助。
空间使用情况非常相似。您正在谈论字符串的长度字节与分隔符。
但是对于关系建模来说,这是没有问题的。单独的列——甚至关联表中的单独的行——是正确的解决方案。
关于mysql - 哪些表架构最适合性能(列与行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856560/