哪个表架构最适合性能(列与行)?

  • 本文关键字:性能 mysql sql sqlperformance
  • 更新时间 :
  • 英文 :


我必须使用两个表模式之一,

第一个架构:

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 = 1ROW之前有value后更新为NULL


在这两种情况下,它们都会有NULL cols值,第二模式NULL cols可以DELETED,但我不知道保留还是DELETE更好。


简而言之:哪种架构对性能更好?将NULL col保留在第二个架构中还是DELETE它们更好?

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

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

空间使用情况非常相似。 您正在谈论字符串与分隔符的长度字节。

但对于关系建模,这是毫无疑问的。 单独的列 - 甚至是关联表中的单独行 - 是正确的解决方案。

相关内容

  • 没有找到相关文章

最新更新