【问题标题】:Oracle SQL View with select statement in whereOracle SQL 视图在 where 中带有 select 语句
【发布时间】:2017-03-16 15:06:42
【问题描述】:

您好,我的某个观点有问题。

我用这个语句查看次数

where date=(select d from user_date_table)

这对结果很好,但性能很慢。

当我执行以下操作时:

where date=to_date(

这要快得多,但在这里不起作用,因为我必须给视图这个值。

还有什么我可以做的吗?

现在我已经用一个包测试了它,该包有一个函数 package_name.get_user_date,它给了我价值。但这也很慢。

还有什么其他的东西可以让这个查询更快吗?

谢谢!

【问题讨论】:

  • "这要快得多,但在这里不起作用,因为我必须给视图这个值。" ...我不明白,你在这里的意思..你做过解释您的查询计划?您可以将子选择转换为连接。
  • 向我们展示完整的查询、涉及的表的定义以及两个查询的执行计划。 Formatted请发短信,no screen shots
  • user_date_table 中的d 列是否只有一个日期?难以置信。如果有多个日期,则查询将不起作用。因此,如果它确实有效,那么您并没有向我们展示您的真实查询。为什么不?无论如何:在子查询中,(select TO_DATE(d, '......') from ....where....)

标签: sql oracle performance


【解决方案1】:

您可以尝试两种可能的方法来解决此问题。 user_date_table 中是否有重复的日期?

如果没有,那么您可以在查询中加入此表,而不是将其放入 where 子句中。

如果是这样,那么您可以将视图中的查询更改为 选择 ... 从你的表 t 存在于哪里 ( 选择 * 来自 user_date_table udt 其中 udt.d = r.date )

另外,检查并查看 user_date_table 上有哪些索引。也许在 to_date(d) 上有一个基于函数的索引,这就是它工作得更快的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2013-07-07
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多