Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / константы в запросе и SELECT / 5 сообщений из 5, страница 1 из 1
26.08.2020, 18:01
    #39992648
Albatross
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
константы в запросе и SELECT
есть у меня представление вида...


create view v_1

as

select 1 as flg, * from t1.... --сложный запрос

union all


select 2 as flg, * from t2.... --сложный запрос

;


когда я делаю select * from v_1 where flg = 1, вижу, что в плане запроса оба подзапроса из UNION работают.
как бы ему подсказать, что достаточно только первую часть смотреть? или может другой способ есть, чтобы сразу определить множество, которое нужно.
...
Рейтинг: 0 / 0
26.08.2020, 19:46
    #39992675
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
константы в запросе и SELECT
Albatross,

Покажи план, скорее всего, ты его неправильно читаешь.
...
Рейтинг: 0 / 0
26.08.2020, 20:16
    #39992684
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
константы в запросе и SELECT
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
Connected to Oracle Database 18c Express Edition Release 18.0.0.0.0 
Connected as user1@//192.168.1.201:1522/XE

SQL> create table t1 as select rownum v from dual connect by level < 101;

Table created

SQL> alter table T1
  2    add constraint t1_pk primary key (V);

Table altered


SQL> create table t2 as select rownum v from dual connect by level < 101;

Table created


SQL> alter table t2 add constraint t2_pk primary key (v);

Table altered


SQL> create view tv as
  2   select 1 flag, t1.* from t1
  3     union all
  4    select 2 flag, t2.* from t2;

View created


SQL> explain plan for select * from tv where flag = 1;

Explained


SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 4273322871

----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |   101 |  1616 |     1   (0)| 00:00:01 |
|   1 |  VIEW              | TV    |   101 |  1616 |     1   (0)| 00:00:01 |
|   2 |   UNION-ALL        |       |       |       |            |          |
|   3 |    INDEX FULL SCAN | T1_PK |   100 |   300 |     1   (0)| 00:00:01 |
|*  4 |    FILTER          |       |       |       |            |          |
|   5 |     INDEX FULL SCAN| T2_PK |   100 |   300 |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - filter(NULL IS NOT NULL)

17 rows selected


SQL> 

...
Рейтинг: 0 / 0
26.08.2020, 20:18
    #39992685
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
константы в запросе и SELECT
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
SQL> explain plan for select * from tv where flag = 2;

Explained


SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2568740826

----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |   101 |  1616 |     1   (0)| 00:00:01 |
|   1 |  VIEW              | TV    |   101 |  1616 |     1   (0)| 00:00:01 |
|   2 |   UNION-ALL        |       |       |       |            |          |
|*  3 |    FILTER          |       |       |       |            |          |
|   4 |     INDEX FULL SCAN| T1_PK |   100 |   300 |     1   (0)| 00:00:01 |
|   5 |    INDEX FULL SCAN | T2_PK |   100 |   300 |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter(NULL IS NOT NULL)

17 rows selected

...
Рейтинг: 0 / 0
26.08.2020, 20:51
    #39992690
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
константы в запросе и SELECT
Albatross,

dmdmdm
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |   101 |  1616 |     1   (0)| 00:00:01 |
|   1 |  VIEW              | TV    |   101 |  1616 |     1   (0)| 00:00:01 |
|   2 |   UNION-ALL        |       |       |       |            |          |
|*  3 |    FILTER          |       |       |       |            |          |
|   4 |     INDEX FULL SCAN| T1_PK |   100 |   300 |     1   (0)| 00:00:01 |
|   5 |    INDEX FULL SCAN | T2_PK |   100 |   300 |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter(NULL IS NOT NULL)



если видишь такую операцию FILTER в плане, значит все ок - дочерние операции выполняться не будут.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / константы в запросе и SELECT / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]