Database 哪一种性能更好?将一个表拆分为两个或增加列数-Oracle

Database 哪一种性能更好?将一个表拆分为两个或增加列数-Oracle,database,oracle,database-design,database-performance,Database,Oracle,Database Design,Database Performance,假设有一个Oracal表,它可能有200列和20000k行。假设我必须向表中添加一个新列。由于列数偏高(即使最大列数为1000,我认为200也偏高),我可以用主键列和我的新列创建一个新表,或者我可以将新列添加到现有表中。这将是性能方面更好。这将是整体更好的设计。如果你能详细说明并引导我了解更多信息,那就更好了。提前感谢。通常,创建新表只是因为“还有很多列”是不明智的。附加表将影响任何读或写操作的性能,该操作需要此列和其他一些列 若表有200多列,那个么完全重新设计它可能是有意义的。此类表格通常有

假设有一个Oracal表,它可能有200列和20000k行。假设我必须向表中添加一个新列。由于列数偏高(即使最大列数为1000,我认为200也偏高),我可以用主键列和我的新列创建一个新表,或者我可以将新列添加到现有表中。这将是性能方面更好。这将是整体更好的设计。如果你能详细说明并引导我了解更多信息,那就更好了。提前感谢。

通常,创建新表只是因为“还有很多列”是不明智的。附加表将影响任何读或写操作的性能,该操作需要此列和其他一些列


若表有200多列,那个么完全重新设计它可能是有意义的。此类表格通常有几个“列组”;例如,它可能类似于“如果记录_type=1,则使用列A、B和C进行操作;如果记录_type=2,则使用列A、D和E进行操作,以此类推。如果是这样,最好将这些组作为单独的表。一般情况是:您经常使用一个组中的列,而很少将这些组连接在一起。

通常,创建新表只是因为“还有许多列”是不明智的。附加表将影响任何读或写操作的性能,该操作需要此列和其他一些列


若表有200多列,那个么完全重新设计它可能是有意义的。此类表格通常有几个“列组”;例如,它可能类似于“如果记录_type=1,则使用列A、B和C进行操作;如果记录_type=2,则使用列A、D和E进行操作,以此类推。如果是这样,最好将这些组作为单独的表。一般情况是:您经常使用一个组中的列,而很少将这些组连接在一起。

对于哪种设计会给您带来更好的性能,或者更一般地说,更好的结果,没有一个单一的答案。这在很大程度上取决于您如何使用数据。除了简单的列数和行数之外,还需要查看数据的一些方面。所有列是否都与表的主键密切相关?如果没有,您可能需要仔细执行规范化过程,以便将表分解为符合更高规范形式的多个表

您是否熟悉各种范式,以及偏离这些范式的后果?专家设计人员有时会忽略规范化规则,但他们知道自己在做什么,并且知道不规范化的缺点

表中表示的实体(对象)是否都属于同一类型,或者可以将该类型拆分为若干子类型(子类)?如果是这样,将表分解为每个类的一个表可能是有意义的。请参阅以下链接:


最后,也是最重要的一点,您可能在表设计中追求不止一个目标。除了速度之外,还具有灵活性和适应性、易学性、易用性和编程性,并且不受数据内部矛盾的影响。您必须平衡这些目标,才能回答表应该如何组成的问题。

对于哪种设计会给您带来更好的性能,或者更一般地说,更好的结果,没有一个单一的答案。这在很大程度上取决于您如何使用数据。除了简单的列数和行数之外,还需要查看数据的一些方面。所有列是否都与表的主键密切相关?如果没有,您可能需要仔细执行规范化过程,以便将表分解为符合更高规范形式的多个表

您是否熟悉各种范式,以及偏离这些范式的后果?专家设计人员有时会忽略规范化规则,但他们知道自己在做什么,并且知道不规范化的缺点

表中表示的实体(对象)是否都属于同一类型,或者可以将该类型拆分为若干子类型(子类)?如果是这样,将表分解为每个类的一个表可能是有意义的。请参阅以下链接:

最后,也是最重要的一点,您可能在表设计中追求不止一个目标。除了速度之外,还具有灵活性和适应性、易学性、易用性和编程性,并且不受数据内部矛盾的影响。您必须平衡这些目标,才能回答表应该如何组成的问题。

正如其他人所说,“这取决于”

如果大部分时间只需要使用列的一小部分,比如有200列,但90%的时间只使用列1、3和24,而其他列使用相对较少,则将其分为两个表,其中一个表具有最常用的列,另一个表具有较少使用的列,这将加快对频繁使用的列的读取速度,因为要读取的数据较少--您不必跳过所有不相关的数据

但是,如果大部分时间使用全部200列,或者以多种不同的组合使用这些列,例如一个查询使用列1、2和7;另一个使用1、24和32;另一种使用2、7和32;等等。然后分成两张桌子会使速度变慢。如果您需要定期读取两个表来获取所有数据,这意味着需要两个单独的索引查找(更糟糕的是,需要两个单独的顺序搜索)。在表中查找记录是一项相对昂贵的操作,比跳过不需要的字段要昂贵得多

但是艾尔