【问题标题】:SQL, Faster way to execute than where and?SQL,比 where 和?
【发布时间】:2016-06-14 14:02:22
【问题描述】:

我是 SQL 新手,我正在寻找一种更快的方法来执行一个非常简单的语句。表中有多个值应该匹配以返回行。有没有更快的方法通过?该表是一个视图,我没有进行任何更改的管理员权限。

select * from TABLE.View_xy 
where location=1 
and b=2
and c=3
and d=4
and e=5
and f=6
and manDate between (TIMESTAMP '2016-06-01 00:00:00') and (TIMESTAMP '2016-06-02 23:59:59') 
and g=7

【问题讨论】:

  • 这是最快的方法,只需在 = 谓词上创建索引,并以 between 结束。
  • @Gar 虽然他们可能没有权限并且它是一个视图而不是一个表格。
  • 在等效的基础字段上放置索引会有所帮助,除非其中一些字段是衍生/计算值。
  • 您是否遇到了该查询的问题?运行时间长吗?绞刑? ETC。 ?乍一看,它看起来很好,但它可能很大程度上取决于视图中实际 SQL 的样子。如果它没有及时返回,请提供有关数据大小/信息的更多信息以及解释。这将有助于发现任何潜在的瓶颈。
  • 我正在尝试提高一个非常大的 VBA 宏的速度,该宏需要 1 小时才能执行。有很多数据用多个 sql 语句处理...这只是第一个:)

标签: sql select where


【解决方案1】:

好吧,如果它是一个视图并且您无法对其进行调整,那么您对此查询无能为力以使其更高效(每个想法都只是基本的过滤条件)。

我可以建议的是:

创建一个包含视图数据的临时表,对该表建立索引,然后对表运行选择。您可以根据需要多次执行此操作。

CREATE TABLE tmp_for_select AS
SELECT * FROM TABLE.View_xy;

CREATE INDEX IND_NAME ON tmp_for_select(location,b,c,d,e,f,g,manDate) ;

select * from tmp_for_select
where location=1 and b=2 and c=3
  and d=4 and e=5 and f=6
  and manDate between (TIMESTAMP '2016-06-01 00:00:00') and (TIMESTAMP '2016-06-02 23:59:59') 
  and g=7;

DROP TABLE tmp_for_select;

【讨论】:

  • “权限不足”:)
  • 你甚至不能创建一个不同的表?
  • ORA-01031 - “权限不足” *原因:试图在没有必要权限的情况下执行数据库操作。 :'(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 2022-11-15
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
相关资源
最近更新 更多