powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Скорость поиска по уникальному первичному ключу в обратном порядке
9 сообщений из 9, страница 1 из 1
Скорость поиска по уникальному первичному ключу в обратном порядке
    #39991922
clipper1995
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Ранее не сталкивался с проблемами скорость поиска по уникальному первичному ключу, матчасть наверное подзабыл.
Встала проблема, долго ищется последняя запись в таблице по уникальному первичному ключу ID number - в обратном направлении (даже простой запрос select id from table order by id desc).
Где-то есть теория, почитать, как вообще реализован поиск, и есть ли какие особенности в обратном направлении (я считал что нет)? Дайте ссылок пожалуйста.
...
Рейтинг: 0 / 0
Скорость поиска по уникальному первичному ключу в обратном порядке
    #39991926
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Скорость поиска по уникальному первичному ключу в обратном порядке
    #39991997
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он же справа идет..
Скорее мимо индекса промахнулся - nls_comp, nls_sort не binary или индекс функциональный.
...
Рейтинг: 0 / 0
Скорость поиска по уникальному первичному ключу в обратном порядке
    #39992004
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
clipper1995,

покажите планы со статистиками
...
Рейтинг: 0 / 0
Скорость поиска по уникальному первичному ключу в обратном порядке
    #39992010
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Он же справа идет..
У кого-то, может, минимум и справа, а у меня слева.
...
Рейтинг: 0 / 0
Скорость поиска по уникальному первичному ключу в обратном порядке
    #39992113
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
clipper1995,
Если ключ суррогатный типа SEQUENCE и идёт перекос дерева индекса, почему-бы не сделать REVERSE у индекса?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE "reversed_PK"
(
f1 number(10) NOT NULL,
f2 varchar2(20) NOT NULL
);
/
CREATE UNIQUE INDEX i_reversed_pk ON "reversed_PK" (f1 ASC)
REVERSE USABLE;
/
ALTER TABLE "reversed_PK" ADD CONSTRAINT pk_revers_pk PRIMARY KEY (f1)
USING INDEX i_reversed_pk ENABLE VALIDATE;
/



Если поля PK вдруг не имеют NOT NULL, то есть ещё интересные нюансы:Ascending unique indexes allow multiple NULL values.
In descending unique indexes, multiple NULL values are treated as duplicate values and therefore are not permitted.
...
Рейтинг: 0 / 0
Скорость поиска по уникальному первичному ключу в обратном порядке
    #39992114
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
clipper1995
долго ищется последняя запись...
Код: plsql
1.
select id from table order by id desc


Этот запрос не запись ищет, а достаёт ВЕСЬ СПИСОК id, отсортированных в обратном порядке.
Если нужен максимальный ID, то так и надо писать:
Код: plsql
1.
SELECT MAX(f1) FROM "reversed_PK"

Зачем тащить всё на клиента?
...
Рейтинг: 0 / 0
Скорость поиска по уникальному первичному ключу в обратном порядке
    #39992116
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Зачем тащить всё на клиента?



Код: 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.
SQL> explain plan for select max(empno) from emp;

Explained.

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

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1707959928

-------------------------------------------------------------------------------------
| Id  | Operation                  | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |        |     1 |     4 |     1   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE            |        |     1 |     4 |            |          |
|   2 |   INDEX FULL SCAN (MIN/MAX)| PK_EMP |     1 |     4 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------------------

9 rows selected.

SQL> explain plan for select max(empno) from emp where empno > -10e124;

Explained.

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

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 738393300

---------------------------------------------------------------------------------------
| Id  | Operation                    | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |        |     1 |     4 |     1   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE              |        |     1 |     4 |            |          |
|   2 |   FIRST ROW                  |        |     1 |     4 |     1   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN (MIN/MAX)| PK_EMP |     1 |     4 |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------


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

   3 - access("EMPNO">(-1.00000000000000000000000000000000000000000000E+125))

15 rows selected.

SQL>
...
Рейтинг: 0 / 0
Скорость поиска по уникальному первичному ключу в обратном порядке
    #39992128
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, логично.
Но это только если ID числовой. Если строка или еще что-то, то другие пляски с бубнами.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Скорость поиска по уникальному первичному ключу в обратном порядке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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