PostgreSQL vs MySQL

Sep 13, 2008 20:03

Извините, не удержался.




Попробовал, и сравнил PostgreSQL и MySQL5 в среде Windows, для web-разработки.
Начал я с MySQL, и имел некоторую предубеждённость в адрес PostgreSQL в связи с её "тяжеловесностью" (и, разумеется, клюнул на посылы MySQL по скорости работы и нетребовательности к ресурсам).

Не знаю, проблема ли это Windows-порта MySQL, но MySQL под Windows - это сущий АдЪ и ИзраильЪ (где жыды и говно) - более глючные вещи тяжело сыскать. PostgreSQL поставился "на одном дыхании" и никаких проблем с ним у меня не было.

Относительно скорости: может быть, MySQL и взаправду значительно быстрее PostgreSQL (в чём я очень сомневаюсь, глянув на некоторые тесты скорости в Интернете), но инструментарий PostgreSQL настолько шире в плане функциональности (например, поддержка иерархических деревьев меток ltree или средств к автоматическому "разворачиванию" иерархии в одну промежуточную таблицу), что говорить о поддержке подобного в нифига (в отличие от PostgreSQL) не расширяемой MySQL не приходится. Часть работы, которая должна какбе выполняться программистом и его клиентским ПО в PostgreSQL замечательным образом переносится на сервер. Не говоря уже о поддержке GIN и GiST-индексов (а не простого B-Tree). И отсутствии в MySQL поддержки транзакций (если не используется InnoDB, который, почему-то, в поставке MySQL5, которая с официального сайта не присутствует).

Вывод один - MySQL (из моего опыта работы с ним) vs PostgreSQL не выдерживает абсолютно никакой критики.
Dixi.


Cравнивать в MySQL и PostgreSQL на самом деле нечего, могу перечислить только несколько убойных моментов, которые сразу приходят на ум:

  • В PostgreSQL есть средство графического отображения анализа выполнения запроса.

  • В PostgreSQL собирается статистика использования таблиц и индексов, для более точной оптимизации запросов.

  • В PostgreSQL можно создавать view-ы не "только для чтения", но и с возможностью их апдейта (делается не автоматически, нужно писать и привязывать SQL для удаления и апдейта).

  • В PostgreSQL расширяемая система типов, помимо составных и перечисляемых можно делать полностью пользовательские типы (с привязкой обработчика).

  • В PostgreSQL помимо B-tree есть также индексы типов GiST и GIN, удобные для полнотекстового поиска и хранения произвольных типов данных, а также поддерживающих произвольные операции сравнения с ними, кроме стандартных операций сравнения (самый простой пример - набор идущих в поставке операций для работы с целочисленными массивами).

  • В PostgreSQL есть возможность работы с колонками составных и массивных типов. Для работы с типом integer[] есть много удобных встроенных функций.

  • В PostgreSQL есть возможность создания т.н. "последовательностей" (sequences), намного более удобная, чем поля типа "автоинкремент".

  • В PostgreSQL полнотекстовый поиск реализуется через использование словарей и настроек для разных языков, и с использованием индексов типа GiST или GIN, позволяющих использовать большое количество операций.

  • В PostgreSQL очень развитая система использования и написания пользовательских функций, с "перегрузкой" (несколько функций могут иметь одно и то же имя, но параметры разного типа). Функции можно писать не только на SQL или на встроенном процедурном языке PL/PgSQL, но и на множестве других языков, например C, PHP, Perl, TCL, Python (реализуется через подключаемые модули).

  • В PostgreSQL есть возможность создания пользовательских аггрегатных функций (на любом из поддерживаемых языков).

  • В PostgreSQL есть возможность создания пользовательских преобразований типов (например ltree <-> text).

  • В PostgreSQL есть "наследование" таблиц. То есть, если какая-то таблица наследует от другой, то таблица, от которой наследуют содержит в себе все записи и тех таблиц, которые от неё наследуют (кроме колонок, которые добавлены в наследовавших таблицах). Определить то, к какой именно таблице принадлежат записи можно по "системной" колонке (указать нужно вручную, в * она не входит).

  • PostgreSQL позволяет использовать в view-ах полный набор SQL-команд, в том числе GROUP BY и ORDER BY.

  • В PostgreSQL есть расширения синтаксиса SQL для ограничения запроса, как то LIMIT (ограничение на количество "вытаскиваемых" записей) и OFFSET (указание количества записей, которые должны быть пропущены в результате запроса).

  • В PostgreSQL есть возможность индексирования не только по данным колонки, но и по функции. То есть, можно сделать индекс не только по Str::text, но и по Length(Str)::text - по длине строки, то есть. Разумеется, эти функции могут быть пользовательскими.

  • В PostgreSQL есть полная поддержка изолированных транзакций (в MySQL тразнакции - только в "движке" InnoDB.
  • В PostgreSQL есть т.н. "tablespace", то есть описание мест, где можно хранить данные (например, различные диски или директории). Можно указать tablespace индивидуально для любой таблицы, либо индекса

Примерно так. Полный список отличий вспоминать надо.

PS. Если кто-то из присутствующихся поделится опытом работы с СУБД Firebird, буду очень им благодарен.
Previous post Next post
Up