我必须使用两种表格模式中的一种,
SELECT *
FROM `posts`
WHERE `id` = '1'
----
id title content col1 col2 col3
1 Title1 Content1 A B C
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
在Performance上使用哪个架构是否重要?
我所知道的是:
第一个架构可以NULL
上有col2, col3
。
第二个架构将没有NULL cols
,除非在NULL
除外value
之前有一些列被col_number = 1
更新为ROW
39; s NULL cols
。
在这两种情况下,它们都会有NULL cols
个值,第二个架构 DELETED
可以是DELETE
,但我不知道如果它最好保留它或NULL col
它们。
简要说明:哪种架构更适合性能?将{{1>}保留在二次架构或DELETE
中会更好吗?
答案 0 :(得分:1)
您永远不应将事物列表存储为分隔字符串。期。您可以将它们存储为JSON或XML或使用其他方法,但在字符串中存储多个值是个坏主意。
因此,第一种方法是更好的方法。在性能方面,两者对于基本查询应该非常相似。第一个允许您在每个列上创建索引,这可能有助于某些目的。
空间使用非常相似。你在谈论字符串与分隔符的长度字节。
但对于关系建模,毫无疑问。单独的列 - 甚至是关联表中的单独行 - 是正确的解决方案。