从Oracle读取表比从Sql-Server读取慢10倍

问题描述

我有一个只有5列和8500行的表。在Oracle数据库上执行以下简单查询大约需要8秒钟,而如果将同一张表导入Sql-Server数据库,则只需不到1秒钟。

SELECT CustomerList.* FROM CustomerList ORDER BY TypeID,OrderNr,Title

问题:我对数据库是完全陌生的,已经开始获得有关它的知识,但是8500条记录要花8秒时间太长了。有什么我可以尝试解决的问题?

更新:我从Oracle数据库中将表导出为文本文件,然后将测试文件导入到另一个新的Oracle数据库中以创建同一表。当我在这个新创建的数据库上执行上述查询时,查询的执行时间再次与以前相同(即大约8秒)。

解决方法

关于高水位线(HWM)。在oracle中,表行的空间以大块分配,称为“范围”。当扩展区被数据行填充时,将分配新的扩展区。 HWM是指向最高分配地址的指针。

如果删除行,则占用的空间仍分配给该表,并且可用于新行,而不必为其获取更多空间。 HWM仍然存在。即使删除所有行(简单的从MYTABLE删除),所有空间仍保留分配给表,并且可用于新行,而不必获取更多空间。 HWM仍然存在。假设您有一个包含10亿行的表。然后,删除除这些行之一以外的所有行。您仍然有10亿的空间,并且相应地设置了HwM。现在,如果您从没有使用索引的WHERE条件的表中进行选择(因此强制进行全表扫描或FTS),oracle仍然必须扫描该十亿行空间以查找所有行,这些行可能分散在整个行中整个空间。但是,当您将这些行插入另一个数据库(甚至同一数据库中的另一个表)时,您仅需要足够的空间来存储这些行。因此,根据新表进行选择会更快。

那是您问题的一种可能性。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...