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