Резкая индексация огромной базы данных (английская Википедия) эффективно

THE GIST

Перед тем, как выполнить массовое импорт английской Википедии в 40 + ГБ, мне пришлось временно удалить индексы и поля автоматического увеличения из трех таблиц ( "страница", "ревизия" и "текст" ) для обработки нагрузки. Теперь я, наконец, успешно импортировал английскую Википедию на свой локальный компьютер и создал локальное зеркало (MediaWiki API). Ура!

Однако теперь мне нужно заново создать индексы и поля с автоматическим приращением менее чем за десять лет. К счастью, (1) я сделал много скриншотов соответствующих таблиц в phpmyadmin до того, как я удалил индексы и поля; (2) Я могу с предельной точностью объяснить шаги, которые я предпринял перед импортом; и (3) это не должно быть слишком сложно для тех, кто свободно владеет MySQL. К сожалению, у меня нет опыта в MySQL, поэтому объяснения "детские шаги" были бы чрезвычайно полезными.

ТОЧНО ЧТО Я ДОЛЖЕН (ПОДГОТОВКА К ИМПОРТУ):

Шаги 1, 2, 3: Это изображение отображает таблицу страница, прежде чем я изменил поле page_id, нажав "Изменить" и отменив "Автоматическое увеличение", (в процессе подготовки к импорту). Я выполнил те же самые изменения для поля rev_id в таблице ревизия и old_id в таблице текст, но пропустил экран чтобы избежать избыточности.

table 'page' before modification of 'page_id'

Шаг 4: На этом изображении показаны индексы для таблицы страница, прежде чем я опустил их все.

indexes for table 'page' before I dropped them

Шаг 5: На этом изображении показаны индексы для таблицы ревизия, прежде чем я опустил их все.

indexes for table 'revision' before I dropped them

Шаг 6: На этом изображении изображены индексы таблицы текст, прежде чем я их всех брошу.

indexes for table 'text' before I dropped them

ЧТО Я НУЖДАЮСЬ (ВОССТАНОВЛЕНИЕ ПОСЛЕ ИМПОРТА):

Мне просто нужно восстановить исходные индексы и автоматически увеличивать поля, не дожидаясь ста лет.

Сведения о настройке: PHP 5.3.8 (apache2handler), MySQL 5.5.16 (InnoDB), Apache 2.2.21, Ubuntu 12.04 LTS, MediaWiki 1.19.0 (частная вики)

Ответ 1

Мне очень нравится Википедия, поэтому я постараюсь помочь.

Вам нужно использовать много

ALTER TABLE

Добавить первичные ключи

ALTER TABLE page ADD PRIMARY KEY (page_id);
ALTER TABLE revision ADD PRIMARY KEY (rev_id);
ALTER TABLE text ADD PRIMARY KEY (old_id);

Добавить автоматическое увеличение назад

ALTER TABLE page MODIFY COLUMN page_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;

Прежде чем продолжить, мне нужно описание таблицы для всех таблиц. Если rev_id и old_id имеют те же определения, что и page_id, то:

ALTER TABLE revision MODIFY COLUMN rev_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE text MODIFY COLUMN old_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;

Добавить уникальные ключи

ALTER TABLE page ADD UNIQUE name_title(page_namespace, page_title);
ALTER TABLE revision ADD UNIQUE rev_page_id(rev_page, rev_id);

Другие индексы

ALTER TABLE page ADD INDEX page_random(page_random);
ALTER TABLE page ADD INDEX page_len(page_len);
ALTER TABLE page ADD INDEX page_redirect_namespace(page_is_redirect, page_namespace, page_len);
ALTER TABLE revision ADD INDEX rev_timestamp(rev_timestamp);
ALTER TABLE revision ADD INDEX page_timestamp(rev_page, rev_timestamp);
ALTER TABLE revision ADD INDEX user_timestamp(rev_user, rev_timestamp);
ALTER TABLE revision ADD INDEX user_text_timestamp(rev_user_text, rev_timestamp);

Опять же, могут быть определения столбцов, которые меняют этот материал. Вам необходимо предоставить информацию CREATE TABLE.