【问题标题】:Oracle : table with unused columns impact performance?Oracle:具有未使用列的表会影响性能吗?
【发布时间】:2014-05-30 22:52:15
【问题描述】:

我的 oracle 数据库中有一个包含 100 列的表。此表中的 50 列未被访问此表的程序使用。 (即选择查询只选择相关列而不使用'*')

我的问题是: 如果我只使用我需要的列重新创建同一个表,它是否会使用与原始表相同的查询来提高查询性能(请记住,只选择了相关的列)

值得一提的是,该程序使这些查询每秒进行合理的次数!

附注: 这是我正在进行的现有项目,很久以前为其他产品设计了表格(这就是我们现在有未使用的列的原因)

【问题讨论】:

    标签: performance oracle


    【解决方案1】:

    因此,如果额外列的数据不再存在于表中,那么平均行会变小。因此,表可以更小,不仅会使用更少的磁盘空间,还会使用更少的 SGA 内存空间,并且缓存会更有效。

    因此,如果您通过全表扫描访问表,则读取段会更快,但如果您使用基于索引的访问机制,那么唯一的性能改进可能是通过提高获取从缓存中阻止。

    [已编辑]

    这个SO thread 建议“它总是拉一个元组......”。因此,如前所述,您可能会看到一些性能提升,但不确定是大是小。

    【讨论】:

    • 数据不会被加载到内存/SGA,因为我们根本没有查询过那些数据。因此,内存/缓存/SGA 都没有问题。我想再次强调,“记住只选择了相关的列”,如 OP 所述。
    • 数据从磁盘提取到 Oracle 系统全局区域 (SGA) 的缓冲区缓存中。从磁盘读取它的最小单位是块,通常是 4kb、8kb 或 16kb。因此,无论您是读取一列还是所有列,都可能需要将整个块从 Oracle 数据文件物理读取到 SGA。
    • 我已经删除了我的答案,伙计。如果您介意以后可以更改它,现在将补充您的。谢谢你的信息,我不知道。
    • 我认为另一个线程确实意味着它总是至少拉一个元组(我评论提到了Oracle中的两个特殊情况),但无论如何读取的最小数据量是块.在 Oracle 中的链接或迁移行的情况下,可能必须读取多个块才能检索单个行。
    • 感谢详细的解答和cmets!
    猜你喜欢
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    相关资源
    最近更新 更多