将列传输到自己的表是否有利于性能?

时间:2016-09-16 14:00:29

标签: mysql sql performance

我有一张大约10列的表格。其中一列是varchar(255)。此列中的典型值的长度约为50到80个字符。 这些值通常是相同的。这意味着此列中可以包含大约100个值(无空值)。该表有大约100万个条目。在select语句中,我获取了表的大量行。

为这个~100值创建一个自己的表并在"主表&#34中使用外键引用它们是一个好主意吗?

我的意思是,当我为它们创建一个新表时,确保它需要更少的空间来保存这些值,但它在性能方面是否合适?

4 个答案:

答案 0 :(得分:1)

最好将它保存在一个单独的表中,并在主表中使用外键引用它们。主表也应该正确编入索引。

将其保存在单独的表中的优点是,如果值发生变化,则无需转到主表(约100万个条目)并将其替换到任何地方而是转到新表并进行更改在一个地方。

答案 1 :(得分:0)

出于性能原因,我会说'不'。如果您有一百万条记录要加入,则每次加入都会产生费用,费用会更高。

您可以做的另一件事是使用表示这些常用文本的数值,并使用Enum(或类似结构)将这些数字转换为您喜欢的语言的文本。

答案 2 :(得分:0)

表格没有表现。查询具有性能。

可能有助于某些查询的性能改变您存储数据的方式。对于其他查询,可能会损害性能。这取决于您针对数据运行的查询。

在您使用两种存储方法测试和衡量查询效果之前,您肯定不会确定。

很抱歉这个没有答案,但我试图阻止在没有足够信息的情况下猜测性能特征的心态。

答案 3 :(得分:0)

我需要在这里考虑4件事。

  • 你会如何保持它? 你说有很多重复的值,你怎么能确定即使你决定将它移到另一个表,你最终会没有重复?您是否会搜索类似的条目,然后决定是否需要创建新条目或重用现有条目?只是你需要考虑的事情。

  • 性能插入?
    如果您没有在该文本字段上进行任何搜索? (如果你这样做,实际上可能会考虑全文搜索选项) 如果你将它移到另一个表中,你确实在表中添加了一个额外的索引,这意味着在插入时间内会有一个惩罚,所以,如果插入时间对你来说更重要,那么你可能会考虑离开现在的文字。

  • 表演阅读?
    如果您更关心阅读时间,再次如果您不在查询中搜索这些文本,那么添加外部表将添加额外的搜索和比较以及更多工作来查找所有数据。所以,把它放在原处就好了。

  • 尺寸
    如果你担心数据的大小,那么是的,你可以将它移到另一个表并尝试减少重复的表以节省空间。