Sql server 从Oracle读取表的速度比从Sql Server读取慢10倍

Sql server 从Oracle读取表的速度比从Sql Server读取慢10倍,sql-server,oracle,Sql Server,Oracle,我有一个只有5列8500行的表。下面对Oracle数据库的简单查询大约需要8秒,而如果将同一个表导入Sql Server数据库,则只需不到1秒 SELECT CustomerList.* FROM CustomerList ORDER BY TypeID, OrderNr, Title 问:我对数据库完全陌生,并已开始了解数据库,但8秒处理8500条记录的时间太长了。我有什么办法可以解决这个问题吗 更新:我将该表从Oracle数据库导出为文本文件,然后将测试文件导入另一个新的Oracle数据库

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

SELECT CustomerList.* FROM CustomerList ORDER BY TypeID, OrderNr, Title
问:我对数据库完全陌生,并已开始了解数据库,但8秒处理8500条记录的时间太长了。我有什么办法可以解决这个问题吗

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

关于高水位线(HWM)。在oracle中,表行的空间是按称为“区段”的大块分配的。用数据行填充数据块时,将分配一个新的数据块。HWM是指向最高分配地址的指针

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


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

数据库性能是一个多方面的问题(硬件、查询优化、索引、统计等)。查询计划通常是一个很好的起点。您可以(sql server)为这两个执行创建查询计划吗?我不熟悉必须如何生成或解释。从我的观点来看,无论您如何处理8500行,都应该非常快,即使在您的PC上的Excel中,更不用说数据库服务器上的Oracle数据库(即使它是您的PC)。8500行几乎是零。接下来的几次选择是需要8秒钟,还是只发生一次?数据库在哪里?CPU做什么?网络你用什么工具?如果删除ORDERBY子句会发生什么情况?您的HWM是否会被设置为CustomerList表的高值?执行CTA并重试(Oracle数据库)检查在Oracle中出现性能问题时应调查/发布的内容。检查
CUSTOMERLIST
是否不是(复杂)视图*,方法是
从用户对象中选择对象类型,其中对象名称='CUSTOMERLIST'
。学习谷歌,例如,Oracle CTA如何查询数据库?使用sqlplus?在屏幕上显示整个8500行?感谢提供信息。我还将表导出到一个文本文件中,然后将该文本导入到一个新的Oracle数据库中。在这种情况下,所花的时间也是一样的。“一样”是什么?快还是慢?当然,正如我所说,HWM问题只是您的问题的一种可能性。“相同”——>缓慢(即大约8秒)