powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему SET STATISTICS INDEX ... так быстр по сравн. со сканированием диапазона ?
4 сообщений из 4, страница 1 из 1
Почему SET STATISTICS INDEX ... так быстр по сравн. со сканированием диапазона ?
    #38631467
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

В некоторой таблице содержится 5.5. млн записей. Мусор предварительно был собран, работа с одного коннекта.

Команда пересчета статистики по её PK-индексу выполняется 90...100 мс и требует менее 12 тыс фетчей:
Код: plaintext
1.
2.
3.
4.
Elapsed time= 0.10 sec
Buffers = 524288
Reads = 0
Writes 5
Fetches = 11894

А вот это вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
SQL> select count(*) from (select 1 i from doc_data where id>=0 );

PLAN (DOC_DATA INDEX (PK_DOC_DATA))

                COUNT
=====================
              5507032

- длится в 50 раз дольше (показан результат после 2-го запуска, reads = 0) и требует почти в 1000 раз больше фетчей:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Current memory = 4603080544
Delta memory = 0
Max memory = 4603080544
Elapsed time= 4.92 sec
Buffers = 524288
Reads = 0
Writes 0
Fetches = 11428137

Если даже для подсчета числа ключей в листовом уровне индекса не требуется лазить в DP, то всё равно не понимаю: откудова такая разница в числе фетчей и времени, в 1 тыс и 50 раз соотв-но.
Число листовых блоков в этом индексе = 11'131
gstat -r
Код: 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.
30.
31.
DOC_DATA (1290)
    Primary pointer page: 208, Index root page: 209
    Total formats: 1, used formats: 1
    Average record length: 48.34, total records: 5507032
    Average version length: 0.00, total versions: 0, max versions: 0
    Average fragment length: 11.89, total fragments: 402882, max fragments: 1
    Average unpacked length: 96.00, compression ratio: 1.99
    Pointer pages: 40, data page slots: 72108
    Data pages: 71960, average fill: 64%
    Primary pages: 59466, full pages: 52725, swept pages: 59466
    Fill distribution:
         0 - 19% = 8722
        20 - 39% = 2900
        40 - 59% = 1270
        60 - 79% = 49574
        80 - 99% = 9494

. . .

    Index PK_DOC_DATA (0)
        Root page: 25735, depth: 3, leaf buckets:  11131 , nodes: 5507032
        Average node length: 11.48, total dup: 0, max dup: 0
        Average key length: 8.49, compression ratio: 1.06
        Average prefix length: 3.51, average data length: 5.49
        Clustering factor: 577133, ratio: 0.10
        Fill distribution:
             0 - 19% = 180
            20 - 39% = 846
            40 - 59% = 1966
            60 - 79% = 3755
            80 - 99% = 4384
Если 1 фетч в вышеприведенной статистике для set statictic index - это на самом деле чтение 1 leaf bucket'a, то вопрос: а сколько раз фетчились ИНДЕКСНЫЕ страницы при выполнении SQL-запроса с планом INDEX (PK_DOC_DATA) ?
...
Рейтинг: 0 / 0
Почему SET STATISTICS INDEX ... так быстр по сравн. со сканированием диапазона ?
    #38631468
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5.5M записей = 11М фетчей, все как всегда (и ты об этом уже спрашивал). Фетчей дофига, записи распаковывать надо (ибо ты ID трогаешь), условие проверять надо, каунт считать надо - вот тебе и 50 раз разницы. Вопрос ни о чем.
...
Рейтинг: 0 / 0
Почему SET STATISTICS INDEX ... так быстр по сравн. со сканированием диапазона ?
    #38631489
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr5.5M записей = 11М фетчей, все как всегда (и ты об этом уже спрашивал). Фетчей дофига, записи распаковывать надо (ибо ты ID трогаешь), условие проверять надо, каунт считать надо - вот тебе и 50 раз разницы. Вопрос ни о чем.RLE, используемый при сжатии, - он что, настолько затратен ? (затраты на проверку условия и каунт - это вообще микроскопом не разглядеть, КМК).
Я главного не пойму: почему нельзя было прочесть индексные страницы только 11 тыс раз, хапнуть всё сразу в один заход. даже если в итоге будет улучшение всего в 1.5-2 раза - неплохая прибавка к семейному бюджету.
...
Рейтинг: 0 / 0
Почему SET STATISTICS INDEX ... так быстр по сравн. со сканированием диапазона ?
    #38631493
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидRLE, используемый при сжатии, - он что, настолько затратен ? (затраты на проверку условия и каунт - это вообще микроскопом не разглядеть, КМК).
криво кажется

ТаблоидЯ главного не пойму: почему нельзя было прочесть индексные страницы только 11 тыс раз, хапнуть всё сразу в один заход.
индексные страницы и так читаются 11 тыс раз, я не знаю о чем ты
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему SET STATISTICS INDEX ... так быстр по сравн. со сканированием диапазона ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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