Замедление INSERT при добавлении индекса
Добавлено: 22 дек 2005, 10:51
Есть таблица:
И два индекса к ней:
Статистика по таблице и индексам:
Каждый день в эту таблицу добавляется где-то 400 тыс.записей. Добавление занимает примерно 5-6 минут.
Возникла необходимость сделать индексы по anum и bnum. Для начала сделал индекс по anum:
Создание этого индекса заняло более 12 часов. Неприятно, но несмертельно.
Хуже другое: после создания индекса conn_anum время добавления записей увеличилось в 6 раз. Естественно, до создания индекса по bnum дело не дошло, и индекс по anum тоже пришлось удалить.
Вот статистика по индексу anum (сразу после создания):
Всего в столбце anum примерно 800000 уникальных значений.
Объясните мне, пожалуйста, почему при создании индекса по anum так сильно увеличилось время добавления записей (из-за сильной упаковки индекса conn_anum?), и что в этой ситуации можно сделать?
Код: Выделить всё
show table conn;
AMAFILE_ID (AMAFILE_ID) INTEGER Not Null
DATETIME (DATETIME) TIMESTAMP Not Null
ANUM (CONN_NUM) VARCHAR(34) Nullable
BNUM (CONN_NUM) VARCHAR(34) Nullable
DUR (DUR) INTEGER Not Null
ITGRP (TGRP) CHAR(6) Nullable
ILNO (LNO) INTEGER Nullable
OTGRP (TGRP) CHAR(6) Nullable
OLNO (LNO) INTEGER Nullable
CAUSE (CAUSE) INTEGER Not Null default 16
Код: Выделить всё
create index conn_datetime on conn (datetime);
create desc index conn_id on conn (amafile_id);
Код: Выделить всё
CONN (130)
Primary pointer page: 138, Index root page: 139
Average record length: 16.06, total records: 208433728
Average version length: 0.00, total versions: 0, max versions: 0
Data pages: 1950303, data page slots: 1952160, average fill: 16%
Fill distribution:
0 - 19% = 267
20 - 39% = 0
40 - 59% = 0
60 - 79% = 1
80 - 99% = 1950035
Index CONN_DATETIME (0)
Depth: 3, leaf buckets: 212178, nodes: 208465569
Average data length: 0.00, total dup: 171964393, max dup: 67
Fill distribution:
0 - 19% = 105
20 - 39% = 3440
40 - 59% = 95451
60 - 79% = 12013
80 - 99% = 101169
Index CONN_ID (1)
Depth: 3, leaf buckets: 211301, nodes: 208450744
Average data length: 0.00, total dup: 208450181, max dup: 801165
Fill distribution:
0 - 19% = 4
20 - 39% = 17
40 - 59% = 116337
60 - 79% = 3
80 - 99% = 94940
Возникла необходимость сделать индексы по anum и bnum. Для начала сделал индекс по anum:
Код: Выделить всё
create index conn_anum on conn (anum);

Вот статистика по индексу anum (сразу после создания):
Код: Выделить всё
Index CONN_ANUM (2)
Depth: 3, leaf buckets: 189539, nodes: 208433728
Average data length: 0.00, total dup: 207691694, max dup: 24246976
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 71712
60 - 79% = 110
80 - 99% = 117717
Объясните мне, пожалуйста, почему при создании индекса по anum так сильно увеличилось время добавления записей (из-за сильной упаковки индекса conn_anum?), и что в этой ситуации можно сделать?