Классика баз данных - статьи

       

Попробуем проиндексировать эти две таблицы


Попробуем проиндексировать эти две таблицы по общему полю

create index street on street (nick); create index street on old (street);

Тот же самый запрос теперь выглядит изнутри вот так:

+--------+------+---------------+------+---------+------+--------+ | table | type | possible_keys | key | key_len | ref | rows | +--------+------+---------------+------+---------+------+--------+ | street | ALL | street | NULL | NULL | NULL | 591 | | old | ALL | street | NULL | NULL | NULL | 122794 | +--------+------+---------------+------+---------+------+--------+ ----------------------------------------------+ Extra | ----------------------------------------------+ | range checked for each record (index map: 1) | ----------------------------------------------+

и занимает 19.7 секунд. Даже с учетом ~1 мин. на создание индексов, выигрыш в скорости заметен. Разобравшись с индексами, можно их удалить

drop index street on street; drop index street on old;

Создаем теперь новую таблицу phone

create table phone ( phonum char(6) not null default "000000", naim varchar(48) not null default "", bd_id smallint unsigned not null references building, other varchar(8) not null );

Для заполнения последней таблицы даже не пробуем делать выборку из неиндексированых таблиц, а первым делом создаем индексы, используя заранее предусмотренное временное поле, соответствующее названию улицы.

create index building on building (tmp, bldng); create index building on old (street, bldng); insert into phone ( phonum, naim, bd_id, other ) select old.phonum, old.title, building.bd_id, old.other from old, building where old.street=building.tmp and old.bldng=building.bldng;

Индексы создались за 3 и 45 сек., а данные вставились за 19 сек. Теперь можно удалить рабочую таблицу и лишние индекс и поле:

drop table old; drop index building on building; alter table building drop tmp;

Подведем некоторые итоги.

Из исходного 8-мегабайтного текстового файла получились 3 связанные таблицы общим размером ~3.8MB.

Содержание  Назад  Вперед