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

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

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

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

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

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

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

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


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