powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / select count(*) from t - почему медленный?
10 сообщений из 10, страница 1 из 1
select count(*) from t - почему медленный?
    #34721717
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему медленно отрабатывает такой запрос?
У меня таблица с 2 млн записей, запрос работает больше минуты.
...
Рейтинг: 0 / 0
select count(*) from t - почему медленный?
    #34721763
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhПочему медленно отрабатывает такой запрос?
У меня таблица с 2 млн записей, запрос работает больше минуты.
"Томущо" версионник.
Вы же сами в соседней ветке давали линк .

ЗЫ Мин/макс и подзапрос - уже пофиксаны, и работают нормально.
...
Рейтинг: 0 / 0
select count(*) from t - почему медленный?
    #34721794
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Daeron WinnipuhПочему медленно отрабатывает такой запрос?
У меня таблица с 2 млн записей, запрос работает больше минуты.
"Томущо" версионник.
Вы же сами в соседней ветке давали линк .

ЗЫ Мин/макс и подзапрос - уже пофиксаны, и работают нормально.

так там по старым версиям...

да уж:
--------
К функции count() относится всё вышесказанное по поводу реализации агрегатных функций в PostgreSQL. Кроме того, информация о видимости записи для текущей транзакции (а конкурентным транзакциям может быть видимо разное количество записей в таблице!) не хранится в индексе. Таким образом, даже если использовать для выполнения запроса индекс первичного ключа таблицы, всё равно потребуется чтение записей собственно из файла таблицы.
...
Рейтинг: 0 / 0
select count(*) from t - почему медленный?
    #34721912
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh
да уж:
--------
К функции count() относится всё вышесказанное по поводу реализации агрегатных функций в PostgreSQL. Кроме того, информация о видимости записи для текущей транзакции (а конкурентным транзакциям может быть видимо разное количество записей в таблице!) не хранится в индексе. Таким образом, даже если использовать для выполнения запроса индекс первичного ключа таблицы, всё равно потребуется чтение записей собственно из файла таблицы.
Ну дык. Это и есть приколы версионника. Абсолютно аналогично работают и оракл и фаербёрд.
...
Рейтинг: 0 / 0
select count(*) from t - почему медленный?
    #34722997
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Daeron Winnipuh
да уж:
--------
К функции count() относится всё вышесказанное по поводу реализации агрегатных функций в PostgreSQL. Кроме того, информация о видимости записи для текущей транзакции (а конкурентным транзакциям может быть видимо разное количество записей в таблице!) не хранится в индексе. Таким образом, даже если использовать для выполнения запроса индекс первичного ключа таблицы, всё равно потребуется чтение записей собственно из файла таблицы.
Ну дык. Это и есть приколы версионника. Абсолютно аналогично работают и оракл и фаербёрд.В оракле есть index-only-scan - то есть выборка по индексу без заглядывания в таблицу.
...
Рейтинг: 0 / 0
select count(*) from t - почему медленный?
    #34723010
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оракл индекс умеет
Код: plaintext
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.
d2$ select count( 1 ) from t1
   2   /

  COUNT( 1 )
----------
    5552081 

d2$ explain plan for select count( 1 ) from t1
   2   /

Объяснено.

d2$ select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------
Plan hash value:  2945854659 
------------------------------------------------------------------------------------
| Id  | Operation                     | Name       | Rows  | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------
|    0  | SELECT STATEMENT              |            |      1  |    158    ( 0 )|  00 : 00 : 03  |
|    1  |  SORT AGGREGATE               |            |      1  |            |          |
|    2  |   BITMAP CONVERSION COUNT     |            |  5440K|    158    ( 0 )|  00 : 00 : 03  |
|    3  |    BITMAP INDEX FAST FULL SCAN| T1_I2      |       |            |          |
------------------------------------------------------------------------------------


 10  строк выбрано.

...
Рейтинг: 0 / 0
select count(*) from t - почему медленный?
    #34723012
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опоздал )
...
Рейтинг: 0 / 0
select count(*) from t - почему медленный?
    #34723461
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatВ оракле есть index-only-scan - то есть выборка по индексу без заглядывания в таблицу.

Т.е. они хранят в индексе видимость его для транзакций?
...
Рейтинг: 0 / 0
select count(*) from t - почему медленный?
    #34723539
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey DaeronТ.е. они хранят в индексе видимость его для транзакций?Не могу сказать, к сожалению не разбираюсь настолько сильно во внутренностях ни оракла, ни постгреса.
...
Рейтинг: 0 / 0
select count(*) from t - почему медленный?
    #34723893
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Daeron LeXa NalBatВ оракле есть index-only-scan - то есть выборка по индексу без заглядывания в таблицу.

Т.е. они хранят в индексе видимость его для транзакций?пройдите в форум оракла.
пояснения там были. (поисковое слово (в дополнение к индес, транзакция, скан) - "блок", но не в смысле локов, а в смысле чего-то типа страниц).

я до конца себе модель там описываемую не продумывал. но навскидку представил не "хранение в индексе- видимости" (что, очевидно, накладно - в каждом узле индекса еще и хранить видимость), а "хранение индекса (его модификаций) - в видимости" (блоке). естественно не по полной копии этого индекса/на тразу, а только модифицируемой части. как "набирается" актуальный индекс из блоков, и что происходит в транзах, модифицирующих почти всю таблицу - не сильно себе представляю.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / select count(*) from t - почему медленный?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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