mysql - 哪些表架构最适合性能(列与行)?

标签 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

性能上使用哪种模式重要吗?

我所知道的是:

第一个架构可以有 NULLcol2, col3 .

第二个架构将没有 NULL cols除非某些列已更新为 NULL拥有value之后之前除了col_number = 1ROW .

<小时/>

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

<小时/>

简单地说:哪种架构性能更好?保留NULL col是不是更好?在第二架构DELETE中他们?

最佳答案

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

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

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

但是对于关系建模来说,这是没有问题的。单独的列——甚至关联表中的单独的行——是正确的解决方案。

关于mysql - 哪些表架构最适合性能(列与行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856560/

相关文章:

mysql - Yii2 调试工具栏中的事件记录查询语法错误

mysql - 将表转换为指定引擎

mysql - SQL子集查询

mysql - 只保留表中分组列的最后两行

sql - 使用多列执行一次更新比执行多次更新更有效吗

java - 创建表时出现 MySQL 语法错误 - Java

python - SQL插入到..哪里(python)

SQL 从时间戳差异中提取值

java - 当我们按 id 过滤列表时,如何使用 HQL 一对多查询关系

SQL 提示在执行前将整个表加载到 RAM 中?