Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat По видимому, разработчики ПГ наконец услышали глас юзеров своей базульки и таки научили планировщик таким элементарным финтам, как использование существующего primary key для count. Я только пока не могу перебраться на версию старше 8.1.3 - импорт/экспорт базы в ~100 ГБ с последующим vacuum analyze это дофига времени... Бизнес не ждет. До нового года откладываю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 11:36 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
alex_v13 LeXa NalBat По видимому, разработчики ПГ наконец услышали глас юзеров своей базульки и таки научили планировщик таким элементарным финтам, как использование существующего primary key для count. Попробую сформулировать максимально математично. Для отработки count() PG должен просмотреть ВСЕ записи попадающие под условие count(). Если эти записи целесообразно получать из индекса (например условие в WHERE), то он может исопльзоться, если нет (SELECT count(*) FROM my_big_table_gigi) - то будет SEQSCAN. В любом случае, будет проверена КАЖДАЯ строчка. И сама аггрегатная функция count() не может использовать индекс. Он может быть использован только для получения строк. Аггрегатные функция max/min - могут использовать индекс. Напомню, в индексе PG нет условий видимости записи для текущей транзакции, как следствие - индекс не может использоваться для определения точного количества строк. Что не мешает использовать его для других, не связанных с подсчетом строк задач в рамках этого же запроса. ЗЫ Вроде похоже на правду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 15:44 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
Теория-то понятна и очевидна: я же написал "использование существующего primary key для count", а не "count по индексу" :) Так что все справедливо. Но вот 8.1.3 для count по таблицам любого размера выдает у меня SeqScan, в то время как 8.2.4 таки выдает IndexScan. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 16:17 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
alex_v13Теория-то понятна и очевидна: я же написал "использование существующего primary key для count", а не "count по индексу" :) Так что все справедливо. Но вот 8.1.3 для count по таблицам любого размера выдает у меня SeqScan, в то время как 8.2.4 таки выдает IndexScan. Ничего не понял :( стихи? провел тест уважаемого LeXa NalBat : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ну и в чем разницо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 17:03 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
Возможно дело в специфике моей базы - маленькие таблицы с большим количеством UPDATE и очень большие с массовыми INSERT - т.е. или много версий записей или много данных не влезающих в память - понятно, что планировщик выбирает SeqScan. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 17:24 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
Andrey Daeronну и в чем разницо?OFFTOPIC cost=4.85..4.86 cost=10.50..10.51 8.2.4 в два раза медленнее :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 17:26 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
А 8.2.4 я проверял на свеже-восстановленной из дампа базе, после VACUUM FULL ANALYZE в которой лишних версий записей и пустых страниц нема - отсюда разница. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 17:28 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
alex_v13или много данных не влезающих в памятьПамять тут ни при чем. Ни для SecScan, ни для IndexScan она не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 17:37 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat Andrey Daeronну и в чем разницо?OFFTOPIC cost=4.85..4.86 cost=10.50..10.51 8.2.4 в два раза медленнее :-) вот-вот!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 17:47 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat alex_v13или много данных не влезающих в памятьПамять тут ни при чем. Ни для SecScan, ни для IndexScan она не нужна. Тогда в shared_buffers оставим как есть по умолчанию, не помню сколько - 1000? Выбор плана завист не только от предполагаемой ПГ ситуации с данным в таблице, но и от доступных ресурсов, чему я был свидетелем неоднократно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 17:54 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
alex_v13Тогда в shared_buffers оставим как есть по умолчанию, не помню сколько - 1000?Возможно, для некоторой, при этом большой и серьезной, задачи большой shared_buffers не нужен. alex_v13Выбор плана завист не только от предполагаемой ПГ ситуации с данным в таблице, но и от доступных ресурсов, чему я был свидетелем неоднократно.Насколько я понял из доки, выбор плана зависит исключительно от статистики по таблицам и параметров описанных в главе 17.6. доки. На тест, иллюстрирующий вляние параметра shared_buffers (или других) на план запроса, хотелось бы взглянуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 18:10 |
|
||
|
select count(*) from t - как быстрее получить прибл.к-во
|
|||
|---|---|---|---|
|
#18+
Например, вот цитата из доки: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. авторa higher value makes it more likely index scans will be used, a lower value makes it more likely sequential scans will be used. Это я так понимаю ключевое место всей фразы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 18:20 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34765573&tid=2005087]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 357ms |

| 0 / 0 |
