哪些表Schema最适合性能(列与行)?

时间:2018-02-18 21:06:06

标签: mysql sql sqlperformance

我必须使用两种表格模式中的一种,

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

在Performance上使用哪个架构是否重要?

我所知道的是:

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

第二个架构将没有NULL cols,除非在NULL除外value之前有一些列被col_number = 1更新为ROW 39; s NULL cols

在这两种情况下,它们都会有NULL cols个值,第二个架构 DELETED可以是DELETE,但我不知道如果它最好保留它或NULL col它们。

简要说明:哪种架构更适合性能?将{{1>}保留在二次架构DELETE中会更好吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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