Performance Oracle:未使用列的表会影响性能吗?

Performance Oracle:未使用列的表会影响性能吗?,performance,oracle,Performance,Oracle,我的oracle数据库中有一个表,有100列。访问此表的程序不使用此表中的50列。(即select查询仅选择相关列,不使用“*”) 我的问题是: 如果我用我需要的列重新创建同一个表,它会使用与原始表相同的查询来提高查询性能吗(请记住,只选择了相关的列) 值得一提的是,该程序使这些查询达到每秒合理的次数 p.S.: 这是我正在处理的一个现有项目,表设计也是很久以前为其他产品设计的(这就是为什么我们现在有未使用的列)因此,如果额外的列获得了不再在表中的数据,则平均行将变小。因此,表可以更小,它不仅使

我的oracle数据库中有一个表,有100列。访问此表的程序不使用此表中的50列。(即select查询仅选择相关列,不使用“*”)

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

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

p.S.:
这是我正在处理的一个现有项目,表设计也是很久以前为其他产品设计的(这就是为什么我们现在有未使用的列)

因此,如果额外的列获得了不再在表中的数据,则平均行将变小。因此,表可以更小,它不仅使用更少的磁盘空间,而且在SGA中使用更少的内存空间,而且缓存效率更高

因此,如果通过完整表扫描访问表,则读取段的速度会更快,但如果使用基于索引的访问机制,则唯一的性能改进可能是通过提高从缓存中获取块的机会

[编辑]


这表明“它总是拉一个元组…”。因此,您可能会看到一些性能改进,如前所述,不确定是主要还是次要。

数据无论如何都不会加载到内存/SGA,因为我们从未查询过该数据。因此,内存/缓存/SGA都是不可能的。我想再次强调,“请记住,只选择了相关列”,如OP所述。数据从磁盘提取到Oracle System Global Area(SGA)的缓冲缓存中。从磁盘读取数据的最小单位是块,通常为4kb、8kb或16kb。因此,无论您读取一列还是所有列,整个数据块都可能需要从Oracle数据文件物理读取到SGA中。如果你介意的话,现在来补充你的,你以后可以修改它。感谢您提供的信息,我不知道。我认为另一个线程实际上意味着它总是至少提取一个元组(我在Oracle中提到了两个特殊情况),但无论如何,读取的数据量最小的是块。对于Oracle中的链接行或迁移行,可能需要读取多个块才能检索单个行。感谢您的详细回答和评论!