Дали мне на переписывание проект на PHP+MySQL с условием что могу делать всё что захочу лишь бы работало как раньше и не глючило. Проект, для примера, представляет из себя информационную базу - таблицу песен привязанных по album_id к таблице альбомов, ну и куча дополнительных полей - теги к каждой песне, текст слов и т. д.
Решил что раз уж переписывать такой хлам 10-летней давности, то лучше сразу на PHP 5.3 со всеми его плюшками. А вот с выбором базы данных затормозил. Дело вот в чём - в проекте за 10 лет его работы обнаружилось нарушение целостности связей между таблицами. Скажем, альбом удалён, а песни остались, так и висят в БД мёртвым грузом. Учитывая, что база проекта была в таблице типа MyISAM, о транзакциях речи не было. Пару лет назад кто-то кое-как выкрутился из ситуации используя вместо транзакций полные блокировки половины таблиц на время работы с ними. Но это костыльное решение. Тогда я посмотрел в сторону InnoDB. Сразу написал первый тест «в лоб»: выборка всех альбомов с песнями, связывая их по album_id:
SELECT * FROM albums AS a, songs AS s WHERE s.album_id = a.id
Перед каждым таким запросом сбрасывал кэши запросов. На 10000 песен получилось так: MyISAM - 0.07 сек, InnoDB - 0,17 сек., т. е. в 2 раза дольше, а это всего один запрос, в среднем же там запросов 10 на страницу. Ко всему прочему размер базы в InnoDB в 2 раза больше чем MyISAM, хотя обе уже в UTF-8.
Всё это на MySQL 5.1.51, MariaDB почему-то не захотела ставиться, а плагин XtraDB к MySQL не захотел активироваться, так что попробовать его не получилось.
В общем, MySQL'овский InnoDB не порадовал, да ещё среди его разработчиков разброд и шатание начался. Решил посмотреть на PostgreSQL, почитав отзывы о нём, что в определённых ситуациях он работает быстрее MySQL. А что можете сказать о нём вы? Сервер - VDS с 256 мб RAM, из которых максимум под БД могу выделить мегабайт 50-60. В основном юзаются сложные SELECT (по отзывам PostgreSQL их куда умнее обрабатывает, но и MyISAM на SELECT'ах быстр, т. к. писался специально для выборок), но и какой-либо механизм обеспечения целостности связей между таблицами обязателен.