Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выбор max(id) только из крайнего сегмента таблицы / 25 сообщений из 33, страница 1 из 2
28.01.2022, 09:10
    #40130145
alHaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Добрый день уважаемые.

Есть сегментированная по диапазону таблица ключ сегментирования поле "DATE", содержит поле "ID" number.

Первичный ключ "ID", "DATE" локальный.
Клиентское приложения периодически запрашивает MAX(ID) для инкрементирования.

При перемещении архивного сегмента возникла проблема, так как часть индекса таблицы после перемещения сегмента стала неиспользуемой, планы выполнения у пользователей поменялись и они выборкой MAX(ID) стали нагружать систему, и виснуть сами, так как первичный ключ перестал использоваться. Пока не перестроил часть этого сегмента.

Я задумался чтобы в клиентском приложении добавить выборку MAX(ID) только из текущего сегмента добавив условие DATE > trunc(sysdate, 'YEAR')

Но индекс перестает использоваться.

Не пойму почему, что оба поля в индексе есть, я как то, был уверен, что индекс будет использоваться.

Прошу разъяснить.
...
Рейтинг: 0 / 0
28.01.2022, 10:01
    #40130159
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos,

1. ID скорее всего уникальная последовательность, оптимизатор не может применить INDEX SKIP SCAN.

2. В индексе нет выражения trunc(DATE , 'YEAR')
...
Рейтинг: 0 / 0
28.01.2022, 10:07
    #40130162
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
PaulWist

2. В индексе нет выражения trunc(DATE , 'YEAR')

у него > trunc( sysdate , 'YEAR')

......
stax
...
Рейтинг: 0 / 0
28.01.2022, 10:42
    #40130168
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Stax

у него > trunc( sysdate , 'YEAR')

......
stax


Ааа, у ТС два индекса по ID и DATE, если внимательно вчитаться в текст.

Тогда надо смотреть на кардинальность индекса по DATE, и что в этом поле лежит на самом деле.

DDL таблицы индексов в студию.
...
Рейтинг: 0 / 0
28.01.2022, 11:55
    #40130224
alHaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
PaulWist,
> Первичный ключ "ID", "DATE" локальный.

Индексов у меня пять, но по другим полям и интересует именно этот.
Индекс первичного ключа, в нем два поля "ID", "DATE", если что то неоднозначно сформулировал, готов уточнить, если это поможет решению.
...
Рейтинг: 0 / 0
28.01.2022, 11:57
    #40130225
alHaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Может какое другое решение предложите.
...
Рейтинг: 0 / 0
28.01.2022, 12:06
    #40130228
Никанор Кузьмич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos
Может какое другое решение предложите.
alHaos
Клиентское приложения периодически запрашивает MAX(ID) для инкрементирования.
Использовать sequence для инкрементирования.
...
Рейтинг: 0 / 0
28.01.2022, 12:13
    #40130229
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos
так как часть индекса таблицы после перемещения сегмента стала неиспользуемой ...

за выходные (ночью) починить индекс

.....
stax
...
Рейтинг: 0 / 0
28.01.2022, 12:19
    #40130233
alHaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Stax, Так и делается сейчас, хотел бы как то в момент нагрузки.
...
Рейтинг: 0 / 0
28.01.2022, 12:21
    #40130234
alHaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Никанор Кузьмич, Поменять запрос, разработчики еще сделают, а вот менять логику тут все печально... Время, ресурсы, приоритеты...
...
Рейтинг: 0 / 0
28.01.2022, 12:31
    #40130238
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos
Первичный ключ "ID", "DATE" локальный

alHaos
MAX(ID)
как же вы раньше не заметили, что MAX(ID) постоянно все секции перебирает...

alHaos
Клиентское приложения периодически запрашивает MAX(ID) для инкрементирования.
интересно, как вы раньше не нарвались на проблемы консистентности? "Одновременно" две сессии никогда не инкрементировали? Не проще вам было эмулировать сиквенс, например, завести отдельную таблицу для "текущего max(id)" - и брать его оттуда с увеличением в автономке и уже потом возвращать.

Насчет текущего: Допустим у вас такая таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table t (
  id int,
  dt date,
  constraint t_pk primary key(id,dt)
    using index local
)
  partition by range (dt) 
  interval(numtodsinterval(1, 'day'))
  (
  PARTITION p0 VALUES LESS THAN (date'2022-01-01')
  )
/
begin
  insert into t 
    select level, date'2022-01-01' + numtodsinterval(level,'hour')
    from dual
    connect by level<=24*30;
  dbms_stats.gather_table_stats('','T');
end;
/



max(id) тогда будет с перебором всех секций
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Plan hash value: 2937412234

----------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |      |     1 |     4 |     1   (0)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE             |      |     1 |     4 |            |          |       |       |
|   2 |   PARTITION RANGE ALL       |      |     1 |     4 |     1   (0)| 00:00:01 |     1 |1048575|
|   3 |    INDEX FULL SCAN (MIN/MAX)| T_PK |     1 |     4 |     1   (0)| 00:00:01 |     1 |1048575|
----------------------------------------------------------------------------------------------------


max(dt) тоже будет не быстрым - см IFFS
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
----------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |      |     1 |     8 |    10   (0)| 00:00:01 |       |       |
|   1 |  PARTITION RANGE ALL MIN/MAX|      |     1 |     8 |            |          |1048575|     1 |
|   2 |   SORT AGGREGATE            |      |     1 |     8 |            |          |       |       |
|   3 |    INDEX FAST FULL SCAN     | T_PK |   720 |  5760 |    10   (0)| 00:00:01 |1048575|     1 |
----------------------------------------------------------------------------------------------------


select max(id) from t partition for (date'...') или просто partition (имя секции) конечно работать будут, но это вам надо будет получать сначала или макс дату или имя секции:
select max(id) from t partition for (date'2022-01-28')
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
----------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |      |     1 |     4 |     1   (0)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE             |      |     1 |     4 |            |          |       |       |
|   2 |   PARTITION RANGE SINGLE    |      |     1 |     4 |     1   (0)| 00:00:01 |    29 |    29 |
|   3 |    INDEX FULL SCAN (MIN/MAX)| T_PK |     1 |     4 |     1   (0)| 00:00:01 |    29 |    29 |
----------------------------------------------------------------------------------------------------


Можете, конечно, сделать функцию, которая будет сначала получать имя секции или дату и уже потом селектить по ней, но тогда лучше еще индекс завести например
Код: plsql
1.
create index t_ix_dt_id on t(dt,id) local;
...
Рейтинг: 0 / 0
28.01.2022, 12:39
    #40130244
Никанор Кузьмич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos
Никанор Кузьмич, Поменять запрос, разработчики еще сделают, а вот менять логику тут все печально...
А в чем печаль?
Сейчас они делают
Код: plsql
1.
select max(id) from table

и прибавляют к нему единицу, а нужно изменить всего лишь на
Код: plsql
1.
select table_seq.nextval from dual

и не прибавлять единицу... А еще можно сделать
Код: plsql
1.
select table_seq.nextval - 1 from dual

и даже прибавление единицы не убирать, если разрабы уж совсем ленивые заняты.
...
Рейтинг: 0 / 0
28.01.2022, 12:40
    #40130245
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos
Никанор Кузьмич, Поменять запрос, разработчики еще сделают, а вот менять логику тут все печально... Время, ресурсы, приоритеты...
так это и будет "поменять запрос" тупо на некствал. Что вам ещё менять? Хуже текущего у вас уже все равно не придумать
...
Рейтинг: 0 / 0
28.01.2022, 12:46
    #40130248
alHaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Sayan Malakshinov, даже не знаю, не думал как две сессии одновременно инкрементируют..., я не разработчик этой системы, может в рамках одной транзакции все...

имя секции в запросе, интересно но как быть в момент смены текущей секции.
...
Рейтинг: 0 / 0
28.01.2022, 12:49
    #40130249
alHaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Благодарю уважаемые за информацию к размышлению, дальнейшие ответы опционы.
...
Рейтинг: 0 / 0
28.01.2022, 13:01
    #40130256
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos
PaulWist,
> Первичный ключ "ID", "DATE" локальный.

Индексов у меня пять, но по другим полям и интересует именно этот.
Индекс первичного ключа, в нем два поля "ID", "DATE", если что то неоднозначно сформулировал, готов уточнить, если это поможет решению.


Повторяю:

DDL таблицы индексов в студию, перевожу, скрипты create table, create index.
...
Рейтинг: 0 / 0
28.01.2022, 13:19
    #40130262
alHaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
PaulWist, Будьте любезны

Код: 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.
create table "target_table"
(
  field_01 DATE,
  field_02 NUMBER,
  field_03 NUMBER,
  "DATE"   DATE not null, 
  field_04 NUMBER(10),
  field_05 NUMBER,
  field_06 VARCHAR2(10),
  field_07 VARCHAR2(2000),
  field_08 VARCHAR2(6),
  field_09 NUMBER(1) default 0,
  field_10 NUMBER,
  "id"     NUMBER not null, 
  field_11 NUMBER,
  field_12 VARCHAR2(2000),
  field_13 NUMBER,
  field_14 VARCHAR2(6),
  field_15 NUMBER,
  field_16 NUMBER,
  field_17 NUMBER,
  field_18 DATE,
  field_19 DATE
)
partition by range (DATE)
(
  partition PART_2003 values less than (TO_DATE(' 2004-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

...

  partition PART_2021 values less than (TO_DATE(' 2022-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  partition PART_2022 values less than (TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  partition PART_MAX values less than (MAXVALUE)
);
create index IDX_1 on "target_table" (field_10)
  compress  nologging  local;
create index IDX_2 on "target_table" (field_04, "DATE", field_03)
  compress  nologging  local;
create index IDX_3 on "target_table" (field_05)
  compress  nologging  local;
create index IDX_4 on "target_table" (field_17, "DATE", field_03)
  compress  nologging  local;
alter table "target_table"
  add constraint PK primary key (ID, "DATE")
  using index 
  local;
alter index PK nologging;
...
Рейтинг: 0 / 0
28.01.2022, 14:10
    #40130290
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos,

авторalter table "target_table"
add constraint PK primary key (ID, "DATE")
а почему ID без кавычек ? и нужно соблюдать регистр
...
Рейтинг: 0 / 0
28.01.2022, 14:25
    #40130301
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
123ййа почему ID без кавычек ?

Потому что в отличии от DATE он не является зарезервированным словом, очевидно...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.01.2022, 14:29
    #40130303
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Dimitry Sibiryakov,

посмотри create table.
...
Рейтинг: 0 / 0
28.01.2022, 15:34
    #40130347
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos
PaulWist, Будьте любезны

Код: 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.
create table "target_table"
(
  field_01 DATE,
  field_02 NUMBER,
  field_03 NUMBER,
  "DATE"   DATE not null, 
  field_04 NUMBER(10),
  field_05 NUMBER,
  field_06 VARCHAR2(10),
  field_07 VARCHAR2(2000),
  field_08 VARCHAR2(6),
  field_09 NUMBER(1) default 0,
  field_10 NUMBER,
  "id"     NUMBER not null, 
  field_11 NUMBER,
  field_12 VARCHAR2(2000),
  field_13 NUMBER,
  field_14 VARCHAR2(6),
  field_15 NUMBER,
  field_16 NUMBER,
  field_17 NUMBER,
  field_18 DATE,
  field_19 DATE
)
partition by range (DATE)
(
  partition PART_2003 values less than (TO_DATE(' 2004-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

...

  partition PART_2021 values less than (TO_DATE(' 2022-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  partition PART_2022 values less than (TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  partition PART_MAX values less than (MAXVALUE)
);
create index IDX_1 on "target_table" (field_10)
  compress  nologging  local;
create index IDX_2 on "target_table" (field_04, "DATE", field_03)
  compress  nologging  local;
create index IDX_3 on "target_table" (field_05)
  compress  nologging  local;
create index IDX_4 on "target_table" (field_17, "DATE", field_03)
  compress  nologging  local;
alter table "target_table"
  add constraint PK primary key (ID, "DATE")
  using index 
  local;
alter index PK nologging;


Хм ... уникальность по ID, "DATE" ?
И где такой индекс ?
Или я может чего то не понимаю ?
...
Рейтинг: 0 / 0
28.01.2022, 15:40
    #40130348
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
alHaos
Stax, Так и делается сейчас, хотел бы как то в момент нагрузки.


Ключ в "При перемещении архивного сегмента". Это alter table move partition? Если да:

Код: 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.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
SQL> CREATE TABLE TEST(
  2                    ID  NUMBER ,
  3                    DT DATE
  4                   )
  5    PARTITION BY RANGE (DT)
  6    (
  7    PARTITION P0 VALUES LESS THAN (DATE '2022-01-01'),
  8    PARTITION P1 VALUES LESS THAN (MAXVALUE)
  9    )
 10  /

Table created.

SQL> INSERT
  2    INTO TEST
  3    SELECT  LEVEL,
  4            DATE '2021-12-14' + LEVEL
  5      FROM  DUAL
  6      CONNECT BY LEVEL <= 30
  7  /

30 rows created.

SQL> CREATE UNIQUE INDEX TEST_PK
  2    ON TEST(
  3            ID,
  4            DT
  5           )
  6    LOCAL
  7  /

Index created.

SQL> ALTER TABLE TEST
  2    ADD CONSTRAINT TEST_PK
  3      PRIMARY KEY(
  4                  ID,
  5                  DT
  6                 )
  7
SQL> /

Table altered.

SQL> SELECT  PARTITION_NAME,
  2          STATUS
  3    FROM  USER_IND_PARTITIONS
  4    WHERE INDEX_NAME = 'TEST_PK'
  5  /

PARTITION_NAME  STATUS
--------------- --------
P0              USABLE
P1              USABLE

SQL> ALTER TABLE TEST
  2    MOVE PARTITION P1
  3  /

Table altered.

SQL> SELECT  PARTITION_NAME,
  2          STATUS
  3    FROM  USER_IND_PARTITIONS
  4    WHERE INDEX_NAME = 'TEST_PK'
  5  /

PARTITION_NAME  STATUS
--------------- --------
P0              USABLE
P1              UNUSABLE

SQL> ALTER TABLE TEST
  2    MOVE PARTITION P1
  3    ONLINE
  4  /

Table altered.

SQL> SELECT  PARTITION_NAME,
  2          STATUS
  3    FROM  USER_IND_PARTITIONS
  4    WHERE INDEX_NAME = 'TEST_PK'
  5  /

PARTITION_NAME  STATUS
--------------- --------
P0              USABLE
P1              USABLE

SQL>



SY.
...
Рейтинг: 0 / 0
28.01.2022, 15:43
    #40130350
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Или:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> ALTER TABLE TEST
  2    MOVE PARTITION P1
  3    UPDATE INDEXES
  4  /

Table altered.

SQL> SELECT  PARTITION_NAME,
  2          STATUS
  3    FROM  USER_IND_PARTITIONS
  4    WHERE INDEX_NAME = 'TEST_PK'
  5  /

PARTITION_NAME  STATUS
--------------- --------
P0              USABLE
P1              USABLE

SQL>



SY.
...
Рейтинг: 0 / 0
28.01.2022, 15:44
    #40130353
alHaos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Владимир СА, Developer так нагноил скрипты, есть он там создался автоматически для первичного ключа.

уберите USING INDEX из DDL.
...
Рейтинг: 0 / 0
28.01.2022, 15:56
    #40130364
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор max(id) только из крайнего сегмента таблицы
Sayan Malakshinovmax(id) тогда будет с перебором всех секций
...
max(dt) тоже

max(dt) практически никогда не будет перебирать все секции, т.к. в плане "PARTITION RANGE ALL MIN/MAX" и обратный просмотр партиций (от max к min).
Выполнение завершится на первой секции с данными.
Код: 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.
SQL> select --+ gather_plan_statistics
  2         max(id)
  3    from t;

   MAX(ID)
----------
       720

SQL> select * from dbms_xplan.display_cursor(format=>'allstats last partition');

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID  cdjjpbx2x2a81, child number 0
-------------------------------------
select --+ gather_plan_statistics        max(id)   from t

Plan hash value: 2937412234

--------------------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name | Starts | E-Rows | Pstart| Pstop | A-Rows |   A-Time   | Buffers |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |      |      1 |        |       |       |      1 |00:00:00.01 |      31 |
|   1 |  SORT AGGREGATE             |      |      1 |      1 |       |       |      1 |00:00:00.01 |      31 |
|   2 |   PARTITION RANGE ALL       |      |      1 |      1 |     1 |1048575|     31 |00:00:00.01 |      31 |
|   3 |    INDEX FULL SCAN (MIN/MAX)| T_PK |     32 |      1 |     1 |1048575|     31 |00:00:00.01 |      31 |
--------------------------------------------------------------------------------------------------------------


15 rows selected.

SQL> select --+gather_plan_statistics
  2         max(dt)
  3    from t;

MAX(DT)
-----------
31-jan-2022

SQL> select * from dbms_xplan.display_cursor(format=>'allstats last partition');

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID  3kjm4tjy24z9p, child number 0
-------------------------------------
select --+gather_plan_statistics        max(dt)   from t

Plan hash value: 1139818808

--------------------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name | Starts | E-Rows | Pstart| Pstop | A-Rows |   A-Time   | Buffers |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |      |      1 |        |       |       |      1 |00:00:00.01 |       4 |
|   1 |  PARTITION RANGE ALL MIN/MAX|      |      1 |      1 |1048575|     1 |      1 |00:00:00.01 |       4 |
|   2 |   SORT AGGREGATE            |      |      1 |      1 |       |       |      1 |00:00:00.01 |       4 |
|   3 |    INDEX FAST FULL SCAN     | T_PK |      1 |    720 |1048575|     1 |      1 |00:00:00.01 |       4 |
--------------------------------------------------------------------------------------------------------------

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


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