powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разница по времени выполнения запросов
9 сообщений из 9, страница 1 из 1
Разница по времени выполнения запросов
    #39232274
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Копирую сюда часть из 19134602

PostgreSQL 9.4 32 bit

Создание таблицы
Код: plsql
1.
2.
3.
4.
5.
6.
create table TEST (
    ID        integer not null,
    STR_80    varchar(80) not null,
    DAT       date not null,
    STR_2000  varchar(2000)
);



Заполнение таблицы: 100000000 записей - 8 мин 12 сек
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DO
$$DECLARE 
  ID integer;
BEGIN
  ID = 0;
  WHILE ( ID < 100000000 ) LOOP
    ID = ID + 1;
    insert into TEST (
        ID,
        STR_80,
        DAT,
        STR_2000 )
    values (
        ID,
        'STR_80( ' || lpad( cast( ID as varchar(9) ), 9, '0' ) || ' )',
        current_date,
        'STR_2000( ' || current_date || ' ) - STR_80( ' || lpad( cast( ID as varchar(9) ), 9, '0' ) || ' )' );
  END LOOP;
END$$;



Создание индекса - 2 мин 51 сек
Код: plsql
1.
2.
3.
alter table TEST
  add constraint PK_TEST
      primary key (ID,STR_80,DAT);



Cелекты по 100000 записей, order by + полный фетч

Код: plsql
1.
2.
3.
4.
5.
6.
select *
  from TEST
 where ID > 0
 order by ID, STR_80, DAT
limit(100000) offset(20000000);
-- 3.53 сек



Код: plsql
1.
2.
3.
4.
5.
6.
select *
  from TEST
 where ID > 30000000
 order by ID, STR_80, DAT
limit(100000) offset(20000000);
-- 32.14 сек



Код: plsql
1.
2.
3.
4.
5.
6.
select *
  from TEST
 where ID > 79000000
 order by ID, STR_80, DAT
limit(100000) offset(20000000);
-- 13.76 сек



Непонятно, почему такой разброс: 3.53 - 32.14 - 13.76

С уважением, Polesov.
...
Рейтинг: 0 / 0
Разница по времени выполнения запросов
    #39232292
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

EXPLAIN ANALYZE гиде ?
с буфферсами, обязательно.

хотя за оффсет 20 лямов надо драть руки из родимой с мясом. чтобы значится неповадно даже сидеть на ней было.
...
Рейтинг: 0 / 0
Разница по времени выполнения запросов
    #39232310
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqEXPLAIN ANALYZE гиде ?
с буфферсами, обязательно.
Будут, но позже

qwwqхотя за оффсет 20 лямов надо драть руки из родимой с мясом
Да там везде такой офсет, а разница почти на порядок.
...
Рейтинг: 0 / 0
Разница по времени выполнения запросов
    #39232321
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovqwwqEXPLAIN ANALYZE гиде ?
с буфферсами, обязательно.
Будут, но позже

qwwqхотя за оффсет 20 лямов надо драть руки из родимой с мясом
Да там везде такой офсет, а разница почти на порядок.маловато будет

оценка оптимистично--пессимистическая -- 20 лямов произвольных доступов, не считая тостов и индексов.

на механике это уже не лучше 1000 минут (20 000 оборотов в минуту) [что--то пойдёт из hit за счет совпадения страничек]

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

планы надо смотреть.
...
Рейтинг: 0 / 0
Разница по времени выполнения запросов
    #39232367
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

а составной pk и соответствующая сортировка по 3 полям тут действительно зачем-то нужны?
...
Рейтинг: 0 / 0
Разница по времени выполнения запросов
    #39232368
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
select *
  from TEST
 where ID > 0
 order by ID, STR_80, DAT
limit(100000) offset(20000000);

Код: powershell
1.
2.
3.
"Limit  (cost=26548780.58..26681524.48 rows=100000 width=73)"
"  ->  Index Scan using pk_test on test  (cost=0.57..132743900.63 rows=100000000 width=73)"
"        Index Cond: (id > 0)"



Код: plsql
1.
2.
3.
4.
5.
select *
  from TEST
 where ID > 30000000
 order by ID, STR_80, DAT
limit(100000) offset(20000000);

Код: powershell
1.
2.
3.
4.
5.
"Limit  (cost=20823607.21..20823857.21 rows=100000 width=73)"
"  ->  Sort  (cost=20773607.21..20946187.43 rows=69032086 width=73)"
"        Sort Key: id, str_80, dat"
"        ->  Seq Scan on test  (cost=0.00..2583334.00 rows=69032086 width=73)"
"              Filter: (id > 30000000)"



Код: plsql
1.
2.
3.
4.
5.
select *
  from TEST
 where ID > 79000000
 order by ID, STR_80, DAT
limit(100000) offset(20000000);

Код: powershell
1.
2.
3.
4.
5.
6.
7.
"Limit  (cost=7492784.59..7493034.59 rows=100000 width=73)"
"  ->  Sort  (cost=7442784.59..7493823.96 rows=20415750 width=73)"
"        Sort Key: id, str_80, dat"
"        ->  Bitmap Heap Scan on test  (cost=654014.63..2242545.50 rows=20415750 width=73)"
"              Recheck Cond: (id > 79000000)"
"              ->  Bitmap Index Scan on pk_test  (cost=0.00..648910.69 rows=20415750 width=0)"
"                    Index Cond: (id > 79000000)"
...
Рейтинг: 0 / 0
Разница по времени выполнения запросов
    #39232590
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexiusPolesov,

а составной pk и соответствующая сортировка по 3 полям тут действительно зачем-то нужны?

Да нет, конечно же. Если пройти по ссылке из старт-топика, то видно что это некий абстрактный тест.
Просто в зависимости от условий:
Код: sql
1.
2.
3.
 where ID > 0
 where ID > 30000000
 where ID > 79000000

результаты весьма сильно отличаются по времени.

В принципе, по планам видно, от чего это зависит.
...
Рейтинг: 0 / 0
Разница по времени выполнения запросов
    #39232648
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

можно рандом--кост--пейджом подтюнить -- поближе к 1-ке его опустить.
т.к. пж довольно туповат, думается, коэффициент перекрытия видимо не прикидывает. но плюс-минус лапоть -- для него обычное дело.

только это локально надо делать -- иначе тришкин кафтан в другом месте расползется
...
Рейтинг: 0 / 0
Разница по времени выполнения запросов
    #39232847
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, спасибо за ответ.

Вопрос был не в тюнинге данных запросов, а в причине столь широкого разброса результатов. В принципе, из планов видно, что к чему.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разница по времени выполнения запросов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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