【问题标题】:SQL Server - remote Oracle query extremely slow on date clauseSQL Server - 远程 Oracle 查询在日期子句上非常慢
【发布时间】:2020-02-06 08:17:07
【问题描述】:

从 sql server 客户端查询 oracle:

select top 10 * from [192.168.18.25]..ORDER where date >= '2019/01/01'

上述查询大约需要 400 秒,而在 oracle 客户端中只需几毫秒。

更让我吃惊的是,当将>=替换为<=,或者将日期2019/01/01替换为小于表中最小日期的日期时,查询将再次以毫秒为单位完成。

什么可能导致查询中>= someDate 的性能不佳?

【问题讨论】:

  • 如果您想了解您的流程,那么您需要在 Oracle DB 上查看计划。也许在这里执行很慢。
  • @RustamPulatov 相同的查询在 oracle 中以毫秒为单位完成。所以我认为这与查询计划无关。
  • sql server client 是什么意思?
  • @TomC 我的意思是任何运行 sql server sql 的客户端,比如 Navicat、sql server management studio 等。
  • 所以这是在 sql server 中设置为我假设的链接服务器?我认为您需要查看在 oracle 数据库上运行的实际查询,因为可能正在进行一些翻译。它是否可能相当于cast date as varchar >= '2019/01/01'。也许尝试将字符串显式转换为日期时间?除非你能窥探到实际的 oracle 查询,否则很难知道。

标签: sql sql-server database oracle


【解决方案1】:

不知怎的,我尝试了OPENQUERY,性能问题解决了:

select top 10 * from openquery ( [192.168.18.25], 
'select * from order where date >= ''2019-01-01'' ')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2018-02-14
    • 2012-06-28
    • 2014-07-23
    相关资源
    最近更新 更多