查询的性能 - “疑难案例”

时间:2016-10-13 09:26:00

标签: sql oracle performance

我有一个关于构造查询的问题。在我的选择中,我首先使用相对较大的数据cca 2 mil行创建一个准备“组合”选择。 在这个准备中,我创建了一个案例,它查看来自不同列的值,然后在with子句的其他部分中使用结果。

也许更好的例子:

with portfolio as
(
select case when column_a like '%_V' and substr(column_b,10,1)='2' then column_b
      when column_c is not null then column_c
      when column_c is null and column_d is not null then column_d
      else column_b end as id_user,x.* from table1 x
),
group_a as
(
select * from portfolio where substr(id_user,1,1) in ('a','b','c')
),
group_b as
(
select * from portfolio where substr(id_user,1,1) in ('a','b','f')
),
group_c as
(
select * from portfolio where substr(id_user,1,1) in ('f','g','h')
),
group_d as
(
select * from portfolio where substr(id_user,1,1) in ('d','f','h')
)
select * from ....

所以我的问题是 - 如果我知道它只会在('a','b','c','d'中,最好限制投资组合定义中的substr(id_user,1,1), 'F', 'G', 'H')?

我对SQL查询计划了解不多,但我的理由是,如果我在组合行中使用其他一些条件,我在组子选择中提取(我使用的只是没有将它们放在示例中)然后程序将不必遍历user_id的所有值,它将节省一些时间来反对在整个投资组合中运行子字符串的选项。

在脚本中我使用了id_user的其他部分(其他子字符串),所以我希望整个user_id成为输出od组合。

谢谢,我希望很清楚我想要实现的目标。

0 个答案:

没有答案