Вы пробовали играть с параметром myisam_key_buffer? Это очень важно для скорости обновления индекса.
Также, если у вас есть индексы по дате, идентификатору и т. Д., Которые являются коррелированными столбцами, вы можете сделать:
INSERT INTO archive SELECT .. FROM current ORDER BY id (or date)
Идея состоит в том, чтобы вставлять строки по порядку, в этом случае обновление индекса происходит намного быстрее. Конечно, это работает только для индексов, которые согласуются с ORDER BY ... Если у вас есть несколько довольно случайных столбцов, то это не поможет.
но строго учитывая PostgreSQL.
Вы обязательно должны проверить это.
похоже, что PostgreSQL может помочь нам с помощью частичных индексов и индексов, основанных на функциях.
Да.
Я читал десятки статей о различиях между ними, но большинство из них старые. PostgreSQL уже давно называли «более продвинутым, но медленным» - это все еще обычно случай сравнения MySQL 5.1 с PostgreSQL 8.3 или более сбалансированный сейчас?
Ну, это зависит. Как и в любой базе данных,
- ЕСЛИ ВЫ НЕ ЗНАЕТЕ, КАК НАСТРОИТЬ И НАСТРОЙИТЬ, ЭТО БУДЕТ МЕДЛЕННО
- Если ваше оборудование не соответствует задаче, оно будет медленным
Некоторые люди, которые хорошо знают mysql и хотят попробовать postgres, не учитывают тот факт, что им нужно заново изучать некоторые вещи и читать документы, в результате чего действительно плохо настроенный postgres тестируется, и это может быть довольно медленно.
Для использования в Интернете я провел сравнительный анализ хорошо сконфигурированных postgres на низкоуровневом сервере (Core 2 Duo, диск SATA) с настраиваемым тестовым форумом, который я написал, и он выдает более 4000 веб-страниц форума в секунду насыщение гигабитного Ethernet-соединения сервера базы данных. Так что, если вы знаете, как его использовать, он может кричать быстро (InnoDB был намного медленнее из-за проблем параллелизма). «MyISAM быстрее для небольших простых выборок» - это всего лишь бык, postgres запустит «небольшой простой выбор» за 50-100 микросекунд.
Теперь, для вашего использования, вас это не волнует;)
Вы заботитесь о том, как ваша база данных может вычислять большие агрегаты и большие объединения, и правильно сконфигурированные postgres с хорошей системой ввода-вывода обычно выигрывают у системы MySQL на них, потому что оптимизатор намного умнее и имеет гораздо больше соединений / агрегатные типы на выбор.
Больше всего меня беспокоит отсутствие INSERT IGNORE. Мы часто использовали его при построении некоторой таблицы обработки, чтобы избежать дублирования нескольких записей, а затем выполнить гигантский GROUP BY в конце, чтобы удалить некоторые ошибки. Я думаю, что его использовали достаточно редко, чтобы его было терпимо.
Вы можете использовать GROUP BY, но если вы хотите вставить в таблицу только записи, которых еще нет, вы можете сделать это:
INSERT INTO target SELECT .. FROM source LEFT JOIN target ON (...) WHERE target.id IS NULL
В вашем случае использования у вас нет проблем с параллелизмом, так что это хорошо работает.