首页 > 解决方案 > 为什么从 Oracle 中的某个表读取比同一数据库中的其他表慢

问题描述

Select col1, col2, col22 from Table1 order by col1在 Table2 中做了一个简单且相同的 Select 语句。Select col1, col2, col22 from Table2 order by col1.

我使用 Pentaho ETL 工具将数据从Oracle 19c 复制到 SQL Server。从 Table1 读取比从 Table2 读取慢得多。两者的列数几乎相同,行数几乎相同。两者都存在于同一架构中。Table1 以每秒 10 行的速度读取,而 Table2 以每秒 1000 行的速度读取。

什么会导致这种缓慢?

标签: oracleetlpentahodatabase-replication

解决方案


两个表的索引是否相同?如果索引覆盖了一个表中的所有相关列,则 Oracle 可能正在使用快速全索引扫描(如表的精简版本),或者可能正在使用全索引扫描按 COL1 进行预排序。检查执行计划以确保语句使用相同的访问方法:

explain plan for select ...;
select * from table(dbms_xplan.display);

表段大小是否相同?尽管数据可能相同,但有时一张表可能会浪费大量空间。例如,如果表曾经包含 10 亿行,然后 99.9% 的行被删除,但表从未重建。将段大小与如下查询进行比较:

select segment_name, sum(bytes)/1024/1024 mb
from all_segments
where segment_name in ('TABLE1', 'TABLE2')

推荐阅读