Что быстрее mysql или postgresql
SQLite, MySQL и PostgreSQL: сравниваем популярные реляционные СУБД
Реляционные базы данных используются уже очень давно. Они стали популярными благодаря успешным реализациям реляционных моделей в системах управления, оказавшимся весьма удобными для работы с данными. В этой статье мы сравним три самые популярные реляционные системы управления базами данных (РСУБД): SQLite, MySQL и PostgreSQL.
Системы управления базами данных
Базы данных — это логически смоделированные хранилища любых типов данных. Каждая база данных, не являющаяся бессхемной, следует модели, которая задаёт определённую структуру обработки данных. СУБД — это приложения (или библиотеки), управляющие базами данных различных форм, размеров и типов.
Чтобы лучше разобраться в СУБД, ознакомьтесь с этой статьёй.
Реляционные системы управления базами данных
Реляционные системы реализуют реляционную модель работы с данными, которая определяет всю хранимую информацию как набор связанных записей и атрибутов в таблице.
СУБД такого типа используют структуры (таблицы) для хранения и работы с данными. Каждый столбец (атрибут) содержит свой тип информации. Каждая запись в базе данных, обладающая уникальным ключом, передаётся в строку таблицы, и её атрибуты отображаются в столбцах таблицы.
Отношения и типы данных
Отношения можно определить как математические множества, содержащие наборы атрибутов, отображающие хранящуюся информацию.
Каждый элемент, формирующий запись, должен удовлетворять определённому типу данных (целое число, дата и т.д.). Различные РСУБД используют разные типы данные, которые не всегда взаимозаменяемы.
Такого рода ограничения обычны для реляционных баз данных. Фактически, они и формируют суть отношений.
Популярные РСУБД
В этой статье мы расскажем о 3 наиболее популярных РСУБД:
SQLite
SQLite — это изумительная библиотека, встраиваемая в приложение, которое её использует. Будучи файловой БД, она предоставляет отличный набор инструментов для более простой (в сравнении с серверными БД) обработки любых видов данных.
Когда приложение использует SQLite, их связь производится с помощью функциональных и прямых вызовов файлов, содержащих данные (например, баз данных SQLite), а не какого-то интерфейса, что повышает скорость и производительность операций.
Поддерживаемые типы данных
Note: для получения более подробной информации ознакомьтесь с документацией.
Преимущества
Недостатки
Когда стоит использовать SQLite
Когда не стоит использовать SQLite
MySQL
MySQL — это самая популярная из всех крупных серверных БД. Разобраться в ней очень просто, да и в сети о ней можно найти большое количество информации. Хотя MySQL и не пытается полностью реализовать SQL-стандарты, она предлагает широкий функционал. Приложения общаются с базой данных через процесс-демон.
Поддерживаемые типы данных
Преимущества
Недостатки
Когда стоит использовать MySQL
Когда не стоит использовать MySQL
PostgreSQL
PostgreSQL — это самая продвинутая РСУБД, ориентирующаяся в первую очередь на полное соответствие стандартам и расширяемость. PostgreSQL, или Postgres, пытается полностью соответствовать SQL-стандартам ANSI/ISO.
PostgreSQL отличается от других РСУБД тем, что обладает объектно-ориентированным функционалом, в том числе полной поддержкой концепта ACID (Atomicity, Consistency, Isolation, Durability).
Будучи основанным на мощной технологии Postgres отлично справляется с одновременной обработкой нескольких заданий. Поддержка конкурентности реализована с использованием MVCC (Multiversion Concurrency Control), что также обеспечивает совместимость с ACID.
Хотя эта РСУБД не так популярна, как MySQL, существует много сторонних инструментов и библиотек для облегчения работы с PostgreSQL.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Сравнение производительности MySQL vs PostgreSQL
Реляционные базы данных использовались на протяжении длительного времени. Они стали популярными благодаря системам управления, которые реализуют реляционную модель настолько хорошо, что она является наилучшим способом работы с данными, особенно для критически важных приложений и служб.
MySQL существует достаточно давно и зарекомендовала себя как отличное решение, Postgresql пришла на рынок приблизительно в то же самое время, но предоставляет достаточно много интересных функций и возможностей, благодаря чему стремительно набирает популярность. В этой статье мы попытаемся выполнить сравнение MySQL vs Postgresql, сравним основные отличия этих систем и проведем несколько тестов для сравнения производительности этих баз данных.
Содержание
Основные характеристики баз данных
MySQL — свободная реляционная система управления базами данных. Разработку и поддержку MySQL осуществляет корпорация Oracle, получившая права на торговую марку вместе с поглощённой Sun Microsystems. [1]
PostgreSQL (произносится «Пост-Грэс-Кью-Эл») — свободная объектно-реляционная система управления базами данных (ORDBMS) (по-русски ОРСУБД или просто СУБД) основанная на POSTGRES, версии 4.2, которая была разработана в Научном Компьютерном Департаменте Беркли Калифорнийского Университета. [2]
Параметры | MySQL | PostgreSQL |
---|---|---|
Краткое описание | Широко используемая свободная реляционная система управления базами данных | Широко используемая свободная реляционная система управления базами данных |
Основная модель хранения данных | Реляционная база данных | Реляционная база данных |
Дополнительная модель хранения данных | База данных типа Key/Value, документно-ориентированная база данных | База данных типа Key/Value, документно-ориентированная база данных |
Вебсайт | www.mysql.com | www.postgresql.org |
Документация | dev.mysql.com/doc | www.postgresql.org/docs/manuals |
Разработчик | Oracle | PostgreSQL Global Development Group |
Дата релиза | 1995 | 1996 |
Текущая версия | 8.0.12, Июль 2018 | 10.5, Август 2018 |
Лицензия | Открытое программное обеспечение | Открытое программное обеспечение |
Облачное | Нет | Нет |
Язык реализации | С++, C | C |
Поддерживаемые операционные системы сервера | FreeBSD, Linux, Solaris, OS X, Windows | FreeBSD, Linux, Solaris, OS X, Windows, NetBSD, OpenBSD, HP-UX, Unix |
Схема данных | Да | Да |
Типизация | Да | Да |
Поддержка XML | Да | Да |
Поддержка вторичных индексов | Да | Да |
SQL | Да | Да |
API и другие методы доступа | Проприентарное нативное API, ADO.NET, JDBC, ODBC | Нативная С библиотека, потоковое API для больших объектов, ADO.NET, JDBC, ODBC |
Поддерживаемые языки программирования | Ada, C, C#, С++, D, Delphi, Eiffel, Erlang, Haskell, Java, JavaScript (Node.js), Objective-C, OCaml, Perl, PHP, Python, Ruby, Scheme, Tcl | .Net, C, С++, Delphi, Java, Perl, PHP, Python, Tcl |
Язык написания скриптов на стороне сервера | Да | Функции определенные пользователем |
Триггеры | Да | Да |
Методы разбиения | Горизонтальное разбиение, шардинг с MySQL Cluster или MySQL Fabric | декларативное разбиение (по диапазону или списку) начиная с PostgerSQL 10.0 |
Методы репликаций | Master-Master, Master-Slave | Master-Slave |
MapReduce | Нет | Нет |
Концепции согласования | Немедленное согласование | Немедленное согласованиее |
Параллелизм | Да | Да |
Возможность хранения только в памяти | Да | Нет |
Контроль доступа пользователей | Концепт пользователей с детальной авторизацией | Детальные права доступа в соответствии с SQL стандартом |
Критерии сравнения
Мы сравним скорость выборки из одной таблицы, обновления одной таблицы, скорость сортировки (ORDER BY) и группировки (GROUP BY) при выборке данных из одной таблицы, а также скорость вставки в таблицу и внутреннего объединения двух таблиц.
Выбор структуры таблиц и обоснование
Мы создадим две таблицы: first_table(rand_num int, some_data varchar(40)) и second_table(rand_num int, rand_group int, some_data varchar(40)). Атрибут some_data нам нужен просто для того, чтобы увеличить объем записи на диск, так что в него можно записывать любой текст. Атрибуты rand_num обеих таблиц будут содержать в себе случайные значения, так же как и атрибут rand_group второй таблицы. Тесты будут проводиться следующим образом:
1) сначала мы будем просто добавлять строки (до 400000 строк) в первую таблицу и замерять время добавления.
Когда же мы будем заполнять вторую таблицу (до 400000 строк), то каждый раз после добавления фиксированного числа строк (40000) мы будем проводить следующие измерения: 1) скорость внутреннего объединения первой и второй таблицы по атрибуту rand_num
2) скорость выборки всех данных из второй таблицы, сортируя их по атрибуту rand_num
3) скорость подсчета числа строк второй таблицы, принадлежащих одной группе (rand_group)
4) скорость выборки тех строк из первой таблицы, атрибут rand_num которых совпадает с атрибутом rand_num какой-либо строки второй таблицы
5) Скорость обновления атрибута some_data в строках первой таблицы. Но обновлять мы будем не все строки, а только те, которые удовлетворяют условию, описанному в п.4.
Все тесты мы проведем дважды: с индексированием атрибутов rand_num обеих таблиц и без индексирования. Отметим, что в данной серии тестов нас интересует производительность «из коробки», то есть сразу после установки обеих СУБД.
Результаты
С индексацией
Добавление. postgresql оказался быстрее с большим отрывом в 3,46 раза.
Внутреннее объединение. На небольшом количестве строк postgresql отрывается от mysql незначительно (в районе 25 процентов), но с увеличением размера второй таблицы преимущество postgresql становится более очевидным. При достижении второй таблицей максимального размера скорость объединения в postgresql уже в 2.8 раз выше. В среднем postgresql оказалась быстрее в 1,66 раза.
Сортировка. Postgresql быстрее на 60-100 процентов в зависимости от размера второй таблицы. В среднем postgresql быстрее в 2,04 раза.
Группировка. Сначала postgresql была быстрее в 4 раза, но с ростом второй таблицы преимущество сократилось до 1.6 раз. В среднем postgresql оказалась быстрее в 2,32 раза
Выборка. Postgresql справляется в среднем в 1,97 раза лучше.
Обновление. В postgresql время обновления данных растет более-менее линейно, чего совсем не скажешь о mysql, что говорит о разной реализации двух СУБД. При обновлении максимального числа строк postgresql справилась примерно в 2.5 раза лучше, при обновлении меньше числа строк отрыв становится гораздо существеннее. Postgresql справляется в среднем в 5,72 раза лучше.
Без индексации
И у postgresql, и у mysql скорость добавления выросла. Оно и понятно, ведь теперь не нужно строить дополнительные индексы. Тем не менее преимущество сохраняется у postgresql (в среднем в 4,44 раза).
Сортировка. Postgresql быстрее в среднем в 2 раза.
Группировка. Postgresql быстрее в среднем в 2,41 раза. Отмена индексирования практически никак не повлияла на скорость выполнения запросов с группировкой и сортировкой как у postgresql, так и у mysql. Это говорит о том, что алгоритмы сортировки и группировки в обеих СУБД от индексов не зависят.
Самым же неожиданным оказался тот факт, что отмена индексов в postgresql практически не сказалась даже на скорости выполнения объединения таблиц, а также выборки из первой таблицы и ее обновления. Хотя, казалось бы, в этих тестах нам важна скорость поиска по атрибуту rand_num, а индексирование как раз и должно было ускорить этот поиск. Для mysql же результаты тестирования объединения, выборки и обновления мы даже приводить не будем, так как уже при заполнении второй таблицы на 40000 строк на каждый запрос уходило более 400 секунд. Чего, собственно, изначально мы могли ожидать от обеих СУБД, а не только от MySQL.
Демонстрация работы
Установка баз данных
Подробный процесс установки этих баз данных можно увидеть в соответствующих статьях:
Заключение
Базы данных должны обязательно быть оптимизированы для окружения, в котором они будут использоваться. Исторически так сложилось, что MySQL ориентировалась на максимальную производительность, а Postgresql разрабатывалась как база данных с большим количеством настроек и максимально соответствующую стандарту. Но со временем Postgresql получила много улучшений и оптимизаций.
В большинстве случаев для организации работы с базой данных в MySQL используется таблица InnoDB, эта таблица представляет из себя B-дерево с индексами. Индексы позволяют очень быстро получить данные из диска, и для этого будет нужно меньше дисковых операций. Но сканирование дерева требует нахождения двух индексов, а это уже медленно. Все это значит, что MySQL будет быстрее Postgresql только при использовании первичного ключа.
Вся заголовочная информация таблиц Postgresql находится в оперативной памяти. Вы не можете создать таблицу, которая будет не в памяти. Записи таблицы сортируются по индексу, а поэтому их можно очень быстро извлечь. Для большего удобства можно применять несколько индексов к одной таблице.
В целом PostgreSQL работает быстрее MySQL, как показали тесты, примерно в 2 раза.
Сравнение MySQL или PostgreSQL
Большинство из нас понимают, что задача системы управления базами данных (СУБД) заключается в эффективном и действенном управлении созданием и работой баз данных. Однако, если мы подробно поговорим об этих системах управления базами данных (СУБД), мы поймем, что в зависимости от их возможностей и сильных сторон их можно разделить на разные типы. В наши дни на рынке доступно очень много таких СУБД. Однако двумя наиболее часто используемыми являются MySQL и PostgreSQL. Если мы знаем, что обе они считаются очень эффективными СУБД, как нам определить, какая из них должна быть идеальной для нас? Что ж, чтобы изучить ответ на этот вопрос, мы должны провести сравнение между MySQL и PostgreSQL. Если вас интересует это сравнение, то вы должны выделить время, чтобы прочитать эту статью.
Сравнение MySQL или PostgreSQL
Как мы уже говорили во введении к этой статье, мы проведем сравнение MySQL и PostgreSQL. Поэтому, без дальнейшего преувеличения, мы должны сразу перейти к этому сравнению, которое выглядит следующим образом:
Краткая история MySQL и PostgreSQL
MySQL был запущен в 1995 году, и эта СУБД была разработана Oracle. С другой стороны, PostgreSQL был запущен в 1996 году, и эта СУБД была разработана PostgreSQL Global Development Group. С момента запуска этих двух СУБД они использовались часто, и даже сегодня обе чрезвычайно популярны в сообществе программистов. Обе эти СУБД написаны на языке программирования C, и обе СУБД поддерживают операционные системы Linux, macOS и Windows.
Основные возможности MySQL и PostgreSQL
Если мы поговорим об основных функциях MySQL и PostgreSQL, то мы узнаем, что между этими двумя СУБД есть очень заметные различия. Самая первая из них заключается в том, что MySQL — это система управления реляционными базами данных (СУБД). Система управления реляционной базой данных — это система, в которой у нас есть такие таблицы, которые связаны или связаны друг с другом. Такая СУБД всегда имеет дело с реляционными базами данных. PostgreSQL — это система управления объектно-реляционными базами данных (ORDBMS). Даже если эти термины кажутся вам довольно необычными и незнакомыми, вам все равно не о чем беспокоиться, поскольку мы просто собираемся объяснить вам, что именно мы подразумеваем под этим.
С другой стороны, ORDBMS идет дальше, потому что, помимо поддержки реляционных баз данных, ORDBMS также поддерживает концепции объектно-ориентированного программирования, такие как наследование, классы и т.д. Это означает, что при использовании ORDBMS вы даже можете создавать такие таблицы, соответствующие принципам объектно-ориентированного программирования.
Теперь MySQL — это лицензионный продукт, а PostgreSQL — это СУБД с открытым исходным кодом. Тем не менее, сообщество поддерживает обе эти системы управления базами данных. Если говорить о производительности этих СУБД, то MySQL подходит для веб-проектов, в которых вы должны выполнять простые и понятные транзакции, тогда как PostgreSQL лучше всего подходит для работы с очень сложными и большими наборами данных. Что касается поддержки JSON, MySQL поддерживает JSON, но не поддерживает другие функции NoSQL, тогда как PostgreSQL также поддерживает другие функции NoSQL наряду с поддержкой JSON.
MySQL поддерживает большинство традиционных типов данных, таких как строки, символы, даты и т.д. Тогда как PostgreSQL также поддерживает перечисляемые и неструктурированные типы данных наряду с традиционными типами данных. Если мы дополнительно обсудим графические пользовательские интерфейсы (GUI) этих СУБД, то MySQL имеет MySQL Workbench для этой цели, тогда как PostgreSQL имеет pgAdmin для этой цели. Более того, всякий раз, когда мы пытаемся инициировать новое соединение в MySQL, мы, по сути, создаем новый поток. В то время как инициирование нового соединения в PostgreSQL рассматривается как новый процесс.
Соответствие MySQL и PostgreSQL
Что касается совместимости MySQL и PostgreSQL, то MySQL соответствует некоторым функциям SQL, тогда как PostgreSQL полностью совместим с SQL, т. Е. PostgreSQL поддерживает все функции SQL. Что касается свойств ACID, то есть атомарности, согласованности, изоляции и долговечности, MySQL обеспечивает соответствие только при использовании InnoDB и NDB, тогда как PostgreSQL совместим с ACID.
Некоторые популярные клиенты MySQL и PostgreSQL
Обе эти СУБД, то есть MySQL и PostgreSQL, действительно популярны. Поэтому они используются некоторыми из самых известных компаний. MySQL используется высокопроизводительными веб-платформами, такими как Google, Facebook, Twitter, YouTube, Netflix, GitHub, Spotify и Wikipedia. В то время как известные пользователи PostgreSQL — это фирмы, которые имеют дело с большими объемами сложных данных, такие как Apple, Cisco, Sun Microsystem, Debian и BioPharm. Эти клиенты выбрали любую из этих СУБД, исходя из своих возможностей управления базами данных и конкретных потребностей клиентов.
К настоящему времени мы поняли, что Google, Facebook, Twitter и т. Д. Являются очень известными веб-платформами социальных сетей. Это означает, что для этих платформ требуется такая СУБД, которая может поддерживать быстрые и эффективные веб-транзакции. Поэтому выбор этих платформ — MySQL. С другой стороны, такие организации, как Apple, Cisco и Debian, производят и обрабатывают большие массивы данных. Таким образом, этим фирмам требуется СУБД, способная обрабатывать такие большие объемы данных, поэтому их выбор — PostgreSQL.
Преимущества MySQL и PostgreSQL
Что касается преимуществ использования MySQL, он очень часто получает обновления, касающиеся его функций и безопасности. По этой причине MySQL считается очень надежным. С другой стороны, PostgreSQL легко настраивается, а также поддерживает функцию управления параллелизмом нескольких версий.
Недостатки MySQL и PostgreSQL
Наконец, мы также хотели бы выделить некоторые недостатки использования MySQL и PostgreSQL. Некоторые транзакции MySQL несовместимы с ACID. Кроме того, в случае MySQL нет механизма, обеспечивающего блокировку во время транзакций. Говоря о недостатках PostgreSQL, он не обеспечивает надежного способа обновления до основных выпусков. Если вы думаете об использовании некоторых внешних компонентов с PostgreSQL, тогда ваша кривая обучения будет очень высокой, например, вам потребуется довольно много времени, чтобы изучить его.
Заключение
Теперь мы должны перейти к заключительным замечаниям нашего обсуждения. Прежде всего, если вы застряли в выборе подходящей СУБД для себя между MySQL и PostgreSQL, то первое, что вам следует определить, — это ваши конкретные потребности. Подумайте, нужна ли вам СУБД, которая поддерживает как реляционные базы данных и концепции объектно-ориентированного программирования, так и только СУБД, поддерживающую реляционные базы данных. В первом случае вы определенно выберете PostgreSQL, тогда как во втором случае MySQL удовлетворит ваши потребности. Более того, вам также следует внимательно изучить другие особенности этих двух СУБД, чтобы вы могли сделать идеальный выбор, который наилучшим образом соответствует вашим потребностям.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Сравнение производительности MySQL vs PostgreSQL
Реляционные базы данных использовались на протяжении длительного времени. Они стали популярными благодаря системам управления, которые реализуют реляционную модель настолько хорошо, что она является наилучшим способом работы с данными, особенно для критически важных приложений и служб.
MySQL существует достаточно давно и зарекомендовала себя как отличное решение, Postgresql пришла на рынок приблизительно в то же самое время, но предоставляет достаточно много интересных функций и возможностей, благодаря чему стремительно набирает популярность. В этой статье мы попытаемся выполнить сравнение MySQL vs Postgresql, сравним основные отличия этих систем и проведем несколько тестов для сравнения производительности этих баз данных.
Содержание
Основные характеристики баз данных
MySQL — свободная реляционная система управления базами данных. Разработку и поддержку MySQL осуществляет корпорация Oracle, получившая права на торговую марку вместе с поглощённой Sun Microsystems. [1]
PostgreSQL (произносится «Пост-Грэс-Кью-Эл») — свободная объектно-реляционная система управления базами данных (ORDBMS) (по-русски ОРСУБД или просто СУБД) основанная на POSTGRES, версии 4.2, которая была разработана в Научном Компьютерном Департаменте Беркли Калифорнийского Университета. [2]
Параметры | MySQL | PostgreSQL |
---|---|---|
Краткое описание | Широко используемая свободная реляционная система управления базами данных | Широко используемая свободная реляционная система управления базами данных |
Основная модель хранения данных | Реляционная база данных | Реляционная база данных |
Дополнительная модель хранения данных | База данных типа Key/Value, документно-ориентированная база данных | База данных типа Key/Value, документно-ориентированная база данных |
Вебсайт | www.mysql.com | www.postgresql.org |
Документация | dev.mysql.com/doc | www.postgresql.org/docs/manuals |
Разработчик | Oracle | PostgreSQL Global Development Group |
Дата релиза | 1995 | 1996 |
Текущая версия | 8.0.12, Июль 2018 | 10.5, Август 2018 |
Лицензия | Открытое программное обеспечение | Открытое программное обеспечение |
Облачное | Нет | Нет |
Язык реализации | С++, C | C |
Поддерживаемые операционные системы сервера | FreeBSD, Linux, Solaris, OS X, Windows | FreeBSD, Linux, Solaris, OS X, Windows, NetBSD, OpenBSD, HP-UX, Unix |
Схема данных | Да | Да |
Типизация | Да | Да |
Поддержка XML | Да | Да |
Поддержка вторичных индексов | Да | Да |
SQL | Да | Да |
API и другие методы доступа | Проприентарное нативное API, ADO.NET, JDBC, ODBC | Нативная С библиотека, потоковое API для больших объектов, ADO.NET, JDBC, ODBC |
Поддерживаемые языки программирования | Ada, C, C#, С++, D, Delphi, Eiffel, Erlang, Haskell, Java, JavaScript (Node.js), Objective-C, OCaml, Perl, PHP, Python, Ruby, Scheme, Tcl | .Net, C, С++, Delphi, Java, Perl, PHP, Python, Tcl |
Язык написания скриптов на стороне сервера | Да | Функции определенные пользователем |
Триггеры | Да | Да |
Методы разбиения | Горизонтальное разбиение, шардинг с MySQL Cluster или MySQL Fabric | декларативное разбиение (по диапазону или списку) начиная с PostgerSQL 10.0 |
Методы репликаций | Master-Master, Master-Slave | Master-Slave |
MapReduce | Нет | Нет |
Концепции согласования | Немедленное согласование | Немедленное согласованиее |
Параллелизм | Да | Да |
Возможность хранения только в памяти | Да | Нет |
Контроль доступа пользователей | Концепт пользователей с детальной авторизацией | Детальные права доступа в соответствии с SQL стандартом |
Критерии сравнения
Мы сравним скорость выборки из одной таблицы, обновления одной таблицы, скорость сортировки (ORDER BY) и группировки (GROUP BY) при выборке данных из одной таблицы, а также скорость вставки в таблицу и внутреннего объединения двух таблиц.
Выбор структуры таблиц и обоснование
Мы создадим две таблицы: first_table(rand_num int, some_data varchar(40)) и second_table(rand_num int, rand_group int, some_data varchar(40)). Атрибут some_data нам нужен просто для того, чтобы увеличить объем записи на диск, так что в него можно записывать любой текст. Атрибуты rand_num обеих таблиц будут содержать в себе случайные значения, так же как и атрибут rand_group второй таблицы. Тесты будут проводиться следующим образом:
1) сначала мы будем просто добавлять строки (до 400000 строк) в первую таблицу и замерять время добавления.
Когда же мы будем заполнять вторую таблицу (до 400000 строк), то каждый раз после добавления фиксированного числа строк (40000) мы будем проводить следующие измерения: 1) скорость внутреннего объединения первой и второй таблицы по атрибуту rand_num
2) скорость выборки всех данных из второй таблицы, сортируя их по атрибуту rand_num
3) скорость подсчета числа строк второй таблицы, принадлежащих одной группе (rand_group)
4) скорость выборки тех строк из первой таблицы, атрибут rand_num которых совпадает с атрибутом rand_num какой-либо строки второй таблицы
5) Скорость обновления атрибута some_data в строках первой таблицы. Но обновлять мы будем не все строки, а только те, которые удовлетворяют условию, описанному в п.4.
Все тесты мы проведем дважды: с индексированием атрибутов rand_num обеих таблиц и без индексирования. Отметим, что в данной серии тестов нас интересует производительность «из коробки», то есть сразу после установки обеих СУБД.
Результаты
С индексацией
Добавление. postgresql оказался быстрее с большим отрывом в 3,46 раза.
Внутреннее объединение. На небольшом количестве строк postgresql отрывается от mysql незначительно (в районе 25 процентов), но с увеличением размера второй таблицы преимущество postgresql становится более очевидным. При достижении второй таблицей максимального размера скорость объединения в postgresql уже в 2.8 раз выше. В среднем postgresql оказалась быстрее в 1,66 раза.
Сортировка. Postgresql быстрее на 60-100 процентов в зависимости от размера второй таблицы. В среднем postgresql быстрее в 2,04 раза.
Группировка. Сначала postgresql была быстрее в 4 раза, но с ростом второй таблицы преимущество сократилось до 1.6 раз. В среднем postgresql оказалась быстрее в 2,32 раза
Выборка. Postgresql справляется в среднем в 1,97 раза лучше.
Обновление. В postgresql время обновления данных растет более-менее линейно, чего совсем не скажешь о mysql, что говорит о разной реализации двух СУБД. При обновлении максимального числа строк postgresql справилась примерно в 2.5 раза лучше, при обновлении меньше числа строк отрыв становится гораздо существеннее. Postgresql справляется в среднем в 5,72 раза лучше.
Без индексации
И у postgresql, и у mysql скорость добавления выросла. Оно и понятно, ведь теперь не нужно строить дополнительные индексы. Тем не менее преимущество сохраняется у postgresql (в среднем в 4,44 раза).
Сортировка. Postgresql быстрее в среднем в 2 раза.
Группировка. Postgresql быстрее в среднем в 2,41 раза. Отмена индексирования практически никак не повлияла на скорость выполнения запросов с группировкой и сортировкой как у postgresql, так и у mysql. Это говорит о том, что алгоритмы сортировки и группировки в обеих СУБД от индексов не зависят.
Самым же неожиданным оказался тот факт, что отмена индексов в postgresql практически не сказалась даже на скорости выполнения объединения таблиц, а также выборки из первой таблицы и ее обновления. Хотя, казалось бы, в этих тестах нам важна скорость поиска по атрибуту rand_num, а индексирование как раз и должно было ускорить этот поиск. Для mysql же результаты тестирования объединения, выборки и обновления мы даже приводить не будем, так как уже при заполнении второй таблицы на 40000 строк на каждый запрос уходило более 400 секунд. Чего, собственно, изначально мы могли ожидать от обеих СУБД, а не только от MySQL.
Демонстрация работы
Установка баз данных
Подробный процесс установки этих баз данных можно увидеть в соответствующих статьях:
Заключение
Базы данных должны обязательно быть оптимизированы для окружения, в котором они будут использоваться. Исторически так сложилось, что MySQL ориентировалась на максимальную производительность, а Postgresql разрабатывалась как база данных с большим количеством настроек и максимально соответствующую стандарту. Но со временем Postgresql получила много улучшений и оптимизаций.
В большинстве случаев для организации работы с базой данных в MySQL используется таблица InnoDB, эта таблица представляет из себя B-дерево с индексами. Индексы позволяют очень быстро получить данные из диска, и для этого будет нужно меньше дисковых операций. Но сканирование дерева требует нахождения двух индексов, а это уже медленно. Все это значит, что MySQL будет быстрее Postgresql только при использовании первичного ключа.
Вся заголовочная информация таблиц Postgresql находится в оперативной памяти. Вы не можете создать таблицу, которая будет не в памяти. Записи таблицы сортируются по индексу, а поэтому их можно очень быстро извлечь. Для большего удобства можно применять несколько индексов к одной таблице.
В целом PostgreSQL работает быстрее MySQL, как показали тесты, примерно в 2 раза.