【问题标题】:Query Performance: single column vs multiple column查询性能:单列与多列
【发布时间】:2017-11-16 07:14:04
【问题描述】:

以下2个表结构哪个更好?

在第一个查询中,我在查询中使用LIKE 运算符。 第二个我使用AND 运算符。

第一个表设计在选择数据方面是否比第二个有优势? 在什么情况下我需要在第一个表结构和第二个表结构之间做出决定?

【问题讨论】:

  • 第一个表包含原始的、未格式化的、未规范化的数据。查询成本很高,维护成本更高。我对第二张桌子竖起大拇指。
  • 第二种结构更好,也许以后你需要过滤类型或货币
  • select * from table 1 where measure_name like '%Type=ODO Currency=EUR%';或 Select * from table2 where type='ODO' and Currency = 'EUR' ;哪个工作得更快?
  • 第二次选择会更快
  • 请阅读meta.stackoverflow.com/questions/285551/… 和接受的答案

标签: sql oracle database-design query-optimization


【解决方案1】:

如果您从不需要以任何方式使用TypeCurrency 属性并且始终只使用存储为MEASUREMENT_NAME 的整个文本,第一个会更好。

如果您打算分别使用 TypeCurrency 属性的值,例如在 where 条件下使用它们的值等,第二个选项总是更好的选择。

您最终还可以创建一个组合结构,其中包含整个文本 MEASUREMENT_NAME 和分隔值 TypeCurrency 用于过滤目的。这将占用更多磁盘空间并且不会进行优化,但整个文本或MEASUREMENT_NAME 将来最终也可能包含您现在不知道的属性。这可能就是以原始格式存储 MEASUREMENT_NAME 的原因。

如果属性MEASUREMENT_NAME不是你从外部来源获得的,而是你自己制作的数据结构,并且你正在寻找一种如何存储具有灵活(变化)结构的记录的方法,你最好将它存储为JSON 或 XML 数据,Oracle 有built in functions for JSON data

我还建议对TypeCurrency 值使用链接表,以便主表只包含ID 链接作为外键。

【讨论】:

    【解决方案2】:

    第二张桌子显然比第一张更有优势。如果您必须从第一个表中查询类型或货币,您可能必须使用 right、left 或任何其他函数。 此外,如果您对齐第二个表格的键/约束,请遵循第二范式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-02
      • 2013-04-07
      • 2011-03-13
      • 2020-12-28
      • 2017-08-10
      • 1970-01-01
      • 2011-07-04
      • 2011-04-30
      相关资源
      最近更新 更多