10512

Основные приятные стороны пакета MySQL

Практическая работа

Информатика, кибернетика и программирование

Перечислю основные приятные стороны пакета MySQL. Многопоточность. Поддержка нескольких одновременных запросов. Оптимизация связей с присоединением многих данных за один проход. Записи фиксированной и переменной длины. ODBC драйвер в комплекте с исхо...

Русский

2013-03-27

124.5 KB

1 чел.

Перечислю основные приятные стороны пакета MySQL.

  •  Многопоточность. Поддержка нескольких одновременных запросов.
    •  Оптимизация связей с присоединением многих данных за один проход.
    •  Записи фиксированной и переменной длины.
    •  ODBC драйвер в комплекте с исходником
    •  Гибкая система привилегий и паролей.
    •  До 16 ключей в таблице. Каждый ключ может иметь до 15 полей.
    •  Поддержка ключевых полей и специальных полей в операторе CREATE.
    •  Поддержка чисел длинной от 1 до 4 байт (ints, float, double, fixed), строк переменной длины и меток времени.
    •  Интерфейс с языками C и perl.
    •  Основанная на потоках, быстрая система памяти.
    •  Утилита проверки и ремонта таблицы ( isamchk).
    •  Все данные хранятся в формате ISO8859_1.
    •  Все операции работы со строками не обращают внимания на регистр символов в обрабатываемых строках.
    •  Псевдонимы применимы как к таблицам, так и к отдельным колонкам в таблице.
    •  Все поля имеют значение по умолчанию. INSERT можно использовать на любом подмножестве полей.
    •  Легкость управления таблицей, включая добавление и удаление ключей и полей.

Несмотря на то, что версия 4.0 является устаревшей, она всё ещё имеет значительное распространение. Основные возможности этой версии:

  •  Практически полная реализация ANSI SQL-99, плюс расширения;
  •  Межплатформенная совместимость;
  •  Независимые типы таблиц (MyISAM для быстрого чтения, InnoDB для транзакций и ссылочной целостности);
  •  Транзакции;
  •  Поддержка SSL;
  •  Кеширование запросов;
  •  Репликация: один головной сервер на одного подчинённого, много подчинённых на одного головного;
  •  Полнотекстовая индексация и поиск с использованием типа таблиц MyISAM;
  •  Внедрённая библиотека базы данных;
  •  Поддержка Юникода (UTF-8);
  •  Таблицы InnoDB обеспечивают соответствие требованиям ACID;
  •  Встроенный сервер, позволяющий включать MySQL в автономные приложения.

MySQL 4.1

Рекомендованной версией на 2005 год является MySQL 4.1 вышла 27 октября 2004. Она содержит следующие нововведения:

  •  Вложенные запросы и производные таблицы;
  •  Новая система кодировок и сортировок;
  •  Более быстрый и гибкий протокол клиент-сервер с поддержкой подготовленных запросов, обеспечивающий их оптимальное исполнение;
  •  Новая программа установки и настройки для Microsoft Windows и GNU/Linux;
  •  Защищённые через OpenSSL соединения клиент-сервер;
  •  Высоко-оптимизированная библиотека, которая может быть использована в сторонних программах;
  •  Полноценная поддержка Юникода (UTF-8 и UCS2);
  •  Стандартные пространственные типы данных GIS, для хранения географической информации;
  •  Улучшенный полнотекстовый поиск и система помощи.

MySQL 5.0

Версия MySQL 5.0 вышла 24 октября 2005 года, в этой версии значительно расширена функциональность, которая ставит MySQL в один ряд с коммерческими СУБД. Если раньше СУБД MySQL обвиняли в недостаточной поддержке стандарта SQL, то с появлением пятой версии этой популярной базы данных, появилась практически полная поддержка стандарта SQL. MySQL 5.0 содержит следующие нововведения:

  •  хранимые процедуры и функции;
  •  обработчики ошибок;
  •  курсоры;
  •  триггеры;
  •  представления;
  •  информационная схема (так называемый системный словарь, содержащий метаданные).

 MySQL 5.1

Версия MySQL 5.1 продолжает путь к стандарту SQL:2003. MySQL 5.1 содержит следующие нововведения [6] [7]:

  •  сегментирование — возможность разбить одну большую таблицу на несколько частей, размещенных в разных файловых системах, основываясь на определенной пользователем функции. При определенных условиях это может дать серьезное увеличение производительности и, кроме того, облегчает масштабирование таблиц.
  •  изменено поведение ряда операторов, для обеспечения большей совместимости со стандартом SQL2003;
  •  построчная репликация (row-based репликация), при которой в бинарный лог будет записываться только информация о реально измененных строках таблицы вместо оригинального (и, возможно, медленного) текста запроса. Построчную репликацию можно использовать только для определенных типов sql-запросов, в терминах MySQL - смешанная (mixed) репликация;
  •  встроенный планировщик периодически запускаемых работ. По синтаксису добавление задачи похоже на добавление триггера к таблице, по идеологии - на crontab;
  •  дополнительный набор функций для обработки XML, реализация поддержки XPath;
  •  новые средства диагностики проблем и утилиты для анализа производительности. Расширены возможности по управлению содержимым лог-файлов, логи теперь могут быть сохранены и в таблицах general_log и slow_log. Утилита mysqlslap позволяет провести нагрузочное тестирование БД с записью времени реакции на каждый запрос;
  •  для упрощения операции обновления подготовлена утилита mysql_upgrade, которая выполнит проверку всех существующих таблиц на предмет совместимости с новой версией, и при необходимости выполнит надлежащие корректировки;
  •  MySQL Cluster отныне выпущен как отдельный продукт, базирующийся на MySQL 5.1 и хранилище NDBCLUSTER;
  •  значительные изменения в работе MySQL Cluster, такие, как, например, возможность хранения табличных данных на диске;
  •  возврат к использованию встроенной библиотеки libmysqld, отсутствовавшей в MySQL 5.0;
  •  API для плагинов, которое позволяет загружать сторонние модули, расширяющие функциональность (например, полнотекстовый поиск), без перезапуска сервера.
  •  реализация парсера полнотекстового поиска в виде plug-in;
  •  новый тип таблиц Maria (устойчивый к сбоям клон MyISAM);

Тип таблиц Maria

Maria, - новый MySQL тип таблиц для хранения данных. Maria представляет собой расширенную версию хранилища MyISAM, с добавлением средств сохранения целостности данных после краха.

Основные достоинства Maria [8]

  •  В случае краха производится откат результатов выполнения текущей операции или возврат в состояние до команды LOCK TABLES. Реализация через ведение лога операций;
  •  Возможность восстановления состояния из любой точки в логе операций, включая поддержку CREATE/DROP/RENAME/TRUNCATE. Может быть использовано для создания инкрементальных бэкапов, через периодическое копирование лог файла.
  •  Поддержка всех форматов столбцов MyISAM, расширена новым форматом "rows-in-block", использующим страничный способ хранения данных, при котором данные в столбцах могут кэшироваться;
  •  В будущем будет реализовано два режима: транзакционный и без отражения в логе транзакций, для не критичных данных.
  •  Размер страницы данных равен 8Кб (в MyISAM 1Кб), что позволяет достичь более высокой производительности для индексов по полям фиксированного размера, но медленнее в случае индексирования ключей переменной длинны.

MySQL 6.0

Версия MySQL 6.0 пока находится в стадии альфа-тестирования. Первоначально было принято решение о создании версии 5.2, однако вскоре эта версия была переименована в 6.0.

Одно из основных нововведений версии 6.0 — новый тип таблиц Falcon, разработанный компанией MySQL AB, в качестве потенциальной замены для InnoDB компании InnoBase, приобретённой компанией Oracle. Полный список изменений можно увидеть на официальном сайте[9].

Технические Характеристики

Максимальные размеры таблиц

MySQL 3.22 : до 4 Гб

MySQL 3.23+ : До 8 миллионов терабайт. (2 ^ 63)

При этом необходимо учитывать тот факт, что размер таблицы в новых версиях ограничен лишь предельным размером файла в файловой системе вашей ОС. Например в NTFS этот размер теоретически может быть до 32 эксабайт.

  •  Производительность 

Точные результаты сравнения скорости работы можно найти в постоянно пополняющейся библиотеке проведенных тестов по MySQL (see Раздел 5.1.4, «Набор тестов MySQL (The MySQL Benchmark Suite)»).

СУБД mSQL, благодаря отсутствию затрат дополнительных ресурсов на создание потоков, а также за счет компактности синтаксического анализатора, небольшого количества функций и упрощенной системы безопасности, должна выигрывать в скорости выполнения:

  •  тестов на выполнение циклов соединение-отсоединение, при каждом соединении выполняющих какой-нибудь простой запрос
    •  операций INSERT над простыми таблицами, содержащими небольшое количество столбцов и ключей
    •  CREATE TABLE и DROP TABLE 
    •  операций SELECT чего-нибудь, кроме индексов (очень просто выполняется просмотр таблицы)

Поскольку такие операции очень просты, при больших затратах ресурсов на начальном этапе выиграть в скорости их выполнения достаточно сложно. Поэтому лучшие результаты MySQL может показать лишь после установки соединения. С другой стороны, MySQL значительно превосходит mSQL (и большинство других реализаций SQL) при:

  •  выполнении сложных операций SELECT.
    •  загрузке объемных результатов (протокол, применяющийся в MySQL, превосходит другие по качеству, скорости и безопасности).
    •  работе с таблицами, имеющими строки переменной длины, так как обработка данных в MySQL реализована более эффективно и в нем допускается создание индексов для столбцов с типом VARCHAR.
    •  обработке таблиц, содержащих большое количество столбцов.
    •  обработке таблиц с длинными записями.
    •  выполнении операций SELECT с несколькими выражениями.
    •  выполнении операций SELECT над объемными таблицами.
    •  одновременной работе с несколькими соединениями. Архитектура MySQL Server является полностью многопоточной. Для каждого соединения создается отдельный поток и, таким образом, ни одному из них не приходится ожидать завершения другого (если, конечно, один из потоков не занимается изменением таблицы, доступ к которой требуется другому потоку). В mSQL же после установки одного соединения остальным приходится ожидать его завершения, вне зависимости от сложности и времени выполнения примененного в этом соединении запроса. По завершении первого соединения начинает обслуживаться второе, а все остальные снова ждут своей очереди.
    •  связывании таблиц. При изменении порядка таблиц в вызове SELECT, скорость работы mSQL может упасть ниже всяких допустимых пределов. При выполнении комплекта тестов производительности выполнение такой операции заняло в 15000 раз больше времени, чем у MySQL. Причиной столь плачевно низкой производительности является отсутствие в mSQL оптимизатора связей, который обеспечивал бы оптимальность используемого порядка соединения таблиц. Однако если в mSQL2 расположить таблицы в правильном порядке, не перегружать оператор WHERE и использовать индексные столбцы, связывание будет выполнено относительно быстро! (see Раздел 5.1.4, «Набор тестов MySQL (The MySQL Benchmark Suite)»).
    •  ORDER BY и GROUP BY.
    •  DISTINCT.
    •  работе со столбцами с типами TEXT или BLOB.
  •  Возможности SQL 
    •  GROUP BY и HAVING. В mSQL функция GROUP BY отсутствует вовсе. В MySQL Server же GROUP BY имеется и работает как с HAVING, так и со следующими функциями: COUNT(), AVG(), MIN(), MAX(), SUM()и STD(). Работа оператора COUNT(*) оптимизирована в расчете на быстрый возврат результатов, если оператор SELECT берет данные из одной таблицы, не используя никаких других столбцов и выражения WHERE. Функции MIN() и MAX() могут принимать строковые аргументы.
    •  INSERT и UPDATE с вычислениями. MySQL может выполнять вычисления непосредственно в теле вызова INSERT или UPDATE. Вот пример:
    •  mysql> UPDATE SET x=x*10+y WHERE x<20;
    •  Псевдонимы. В MySQL имеется возможность определения псевдонимов столбцов.
    •  Квалификация имен столбцов. В MySQL, при условии уникальности имени столбца среди таблиц, использующихся при выполнении запроса, нет необходимости приводить его полный квалификатор.
    •  SELECT с функциями. Функций в MySQL много (даже слишком много, чтобы их можно было перечислить здесь; see Раздел 6.3, «Функции, используемые в операторах SELECT и WHERE»).
  •  Эффективность использования дискового пространства 

Можно ли уменьшить таблицы, и если да, то насколько? В MySQL имеются очень точные типы данных, а с их помощью можно создавать таблицы, занимающие минимум пространства. Примером чрезвычайно полезного типа данных MySQL может служить MEDIUMINT, длина значений которого составляет 3 байта. При наличии 100 миллионов записей значение экономии даже одного байта на каждой из них трудно переоценить. Выбор типов столбцов в mSQL2 значительно беднее, и поэтому снизить размеры таблиц заметно трудней.

  •  Стабильность 

Объективно оценить этот параметр трудно. Подробно вопрос стабильности MySQL рассмотрен в разделе Раздел 1.4.3, «Насколько стабильным является MySQL?». Данных и опыта, позволяющих судить о стабильности mSQL, у нас не имеется.

  •  Стоимость 

Цена лицензии является немаловажным фактором. По гибкости лицензии MySQL Server превосходит mSQL, да и стоит меньше. Вне зависимости от того, какой из продуктов вы выберете, не забудьте принять во внимание стоимость лицензии или технической поддержки по электронной почте.

  •  Perl-интерфейсы 

Perl-интерфейсы MySQL практически идентичны своим аналогам из mSQL, хотя и обладают некоторыми дополнительными возможностями.

  •  JDBC (Java) 

В настоящее время для MySQL разработано много разнообразных JDBC-драйверов:

  •  MySQL Connector/J - родной драйвер для Java. Версия 3.x выпускается под двойным лицензированием (GPL и коммерческая лицензия).
    •  Драйвер Resin: коммерческий JDBC-драйвер, распространяющийся как ПО с открытым кодом. http://www.caucho.com/projects/jdbc-mysql/index.xtp
    •  Драйвер gwe: Java-интерфейс, разработанный компанией GWE technologies (более не поддерживается).
    •  Драйвер jms: улучшенная версия драйвера gwe, разработанная Кельвином Заоку Жу (Xiaokun Kelvin ZHU, <X.Zhu@brad.ac.uk>) (более не поддерживается).
    •  Драйвер twz: JDBC-драйвер типа 4, разработанный Терренсом В. Зеллерсом (Terrence W. Zellers <zellert@voicenet.com>). Это коммерческий продукт, но в частном порядке и для образовательных целей им можно пользоваться бесплатно (более не поддерживается).

Рекомендуется использование драйвера mm. Драйвер Resin тоже, возможно, неплох (по крайней мере, результаты тестов выглядят хорошо), но достаточного количества информации по нему у нас пока нет. Мы знаем, что в mSQL имеется JDBC-драйвер, но для сравнения у нас не хватает опыта работы с ним.

  •  Скорость разработки 

Основная команда разработчиков MySQL немногочисленна, но мы привыкли писать код на C и C++ очень быстро. Так как потоки, функции, оператор GROUP BY и т.п. в mSQL все еще не реализованы, этой системе еще долго придется догонять нас. Более точное представление о положении вещей вы сможете получить, прочитав файл HISTORY от mSQL за последний год, и сравнив его с разделом новостей (News) MySQL Reference Manual (see Приложение C, История изменений и обновлений MySQL). После этого сомнений относительно того, какая система развивалась быстрее, остаться не должно.

  •  Инструментальные программы 

Как для mSQL, так и для MySQL сторонними разработчиками было создано множество интересных инструментальных средств. Поскольку перенос программ из mSQL в MySQL сложностей не представляет, почти все интересные приложения, разработанные первоначально для mSQL,имеются и в вариантах для MySQL. В комплект поставки MySQL входит простая программа msql2mysql, исправляющая различия в написании наиболее популярных функций C API между mSQL и MySQL. Вызовы функции msqlConnect(), например, она заменяет на mysql_connect(). Обычно для перевода клиентской программы из mSQL в MySQL оказывается достаточно минимальных усилий.

1.11.2.2. Сравнение возможностей MySQL и PostgreSQL

На странице crash-me (http://www.mysql.com/information/crash-me.php) приведен список ограничений и особенностей СУБД, которые могут быть обнаружены автоматически с помощью специальных программ. Однако не стоит забывать о том, что многие ограничения могут быть изменены настройкой соответствующих баз данных. Впрочем, эта web-страница оказывается очень кстати, если необходимо, чтобы создаваемое приложение нормально работало с несколькими СУБД или для перевода приложения с одной СУБД в другую.

MySQL обладает следующими преимуществами перед PostgreSQL:

  •  MySQL обычно намного превосходит PostgreSQL по скорости работы. Кроме того, в MySQL 4.0 реализован кэш запросов. Он позволяет во много раз увеличить скорость обработки запросов для сайтов, на которых преобладают неоднократно повторяющиеся запросы на чтение.
  •  По количеству пользователей MySQL также намного превосходит PostgreSQL. Поэтому код тестируется значительно более придирчиво и опытным путем доказана большая его надежность, нежели у PostgreSQL. MySQL чаще, чем PostgreSQL, используется на производстве, в основном потому, что компания MySQL AB (ранее - TCX DataKonsult AB) предоставляет высококачественную коммерческую техническую поддержку MySQL с момента появления этой системы на рынке, а у PostgreSQL до самого последнего времени никакой поддержки не было.
  •  MySQL работает в среде Windows лучше, чем PostgreSQL. MySQL Server запускается как настоящее (родное) Windows-приложение (в NT/2000/XP - сервис), в то время как PostgreSQL запускается в среде эмуляции, Cygwin. Нам доводилось слышать о недостаточной стабильности работы PostgreSQL в среде Windows, но самостоятельно эти сведения до сих пор мы проверить не могли.
  •  MySQL оснащен большим количеством API для других языков и поддерживается большим количеством существующих программ, нежели PostgreSQL.
  •  MySQL работает на высоконадежных промышленных системах 24/7 (включенных 24 часа в сутки 7 дней в неделю). В большинстве случаев никаких ``чисток'' в MySQL производить не требуется. PostgreSQL же пока что не может работать в таких системах, так как иногда приходится запускать VACUUM для освобождения занятого последствиями работы команд UPDATE и DELETE пространства и проводить статистический анализ, необходимый для достижения максимальной производительности PostgreSQL. Запускать VACUUM необходимо и после каждого добавления к таблице нескольких столбцов. На напряженно работающих системах VACUUM нужно запускать более часто, в худших случаях - по несколько раз в день. А ведь во время работы VACUUM (а ее работа может продолжаться часы, если база данных достаточно велика) база практически ``мертва''. Впрочем, в PostgreSQL версии 7.2 выполнение основных функций этой программы больше не приводит к блокировке базы, и пользователи могут продолжать нормально работать с ней. Новая команда VACUUM FULL берется за дело более серьезно: она, как и в старых версиях, блокирует таблицу и сжимает копию таблицы на диске.
  •  Репликация MySQL отлично протестирована и используется в таких сайтах, как:
    •  Yahoo Finance (http://finance.yahoo.com/)
    •  Mobile.de (http://www.mobile.de/)
    •  Slashdot (http://www.slashdot.org/)
  •  В комплект поставки MySQL входят два тестовых пакета, mysql-test-run и crash-me (http://www.mysql.com/information/crash-me.php), а также пакет для замеров производительности. Тестовая система постоянно обновляется, в нее добавляется код для тестирования всех новых возможностей и почти всех воспроизводимых ошибок, которые попали в поле нашего зрения. Перед выпуском каждой новой версии мы используем эти пакеты для тестирования MySQL на нескольких платформах. Наши тесты значительно превосходят по своим возможностям все существующие в PostgreSQL аналоги, и обеспечивают высокое качество кода MySQL.
  •  Книг о MySQL вышло значительно больше, нежели о PostgreSQL. Книги о MySQL выпустили издательства O'Reilly, SAMS, Que и New Riders. Все возможности MySQL детально описаны в документации, так как это является обязательным условием включения новых возможностей в код.
  •  MySQL поддерживает больше стандартных функций ODBC, чем PostgreSQL.
  •  MySQL обладает значительно более мощной реализацией ALTER TABLE.
  •  В MySQL предусмотрена возможность создания таблиц без транзакций, что необходимо приложениям, требующим максимально возможной скорости работы. Эти таблицы могут храниться в памяти, относиться к типу HEAP-таблиц или дисковых MyISAM. See Глава 7, Типы таблиц MySQL.
  •  MySQL может работать с двумя поддерживающими транзакции обработчиками таблиц, а именно - InnoDB и BerkeleyDB. Так как все системы поддержки транзакций в разных условиях работают по-разному, это дает разработчику возможность найти наилучшее решение для условий, в которых будет работать его система. See Глава 7, Типы таблиц MySQL.
  •  Команда слияния таблиц MERGE предоставляет в ваше распоряжение уникальную возможность создать представление нескольких идентичных таблиц и работать с ними как с одной. Это особенно удобно для работы с журналами, разбитыми, например, по месяцам. See Раздел 7.2, «Таблицы MERGE».
  •  Возможность сжатия доступных только для чтения таблиц, не отменяющая прямого доступа к их записям, повышает производительность системы, снижая количество операций считывания с диска. Это особенно полезно при архивировании. See Раздел 4.7.4, «myisampack, MySQL-генератор сжатых таблиц (только для чтения)».
  •  В MySQL реализован полнотекстовый поиск. See Раздел 6.8, «Полнотекстовый поиск в MySQL».
  •  Имеется возможность работы с несколькими базами через одно соединение (разумеется, в зависимости от привилегий пользователя).
  •  Система MySQL с самого начала разрабатывалась в расчете на многопоточность, а PostgreSQL использует процессы. Переключение контекстов и доступ к общим данным несколькими потоками осуществляется значительно быстрее, нежели отдельными процессами. Таким образом MySQL Server в многопользовательских приложениях получает неплохое преимущество в производительности, а кроме того, таким образом MySQL Server удается значительно эффективней пользоваться преимуществами, предоставляемыми симметричными мультипроцессорными системами (SMP).
  •  В MySQL реализована значительно более мощная система привилегий, нежели в PostgreSQL. В то время как PostgreSQL обеспечивает лишь привилегии INSERT, SELECT и UPDATE/DELETE над базой или таблицей, MySQL предоставляет возможность определения полного набора разнообразных привилегий на уровне базы, таблицы и столбца. Кроме того, MySQL позволяет задавать привилегии для комбинаций хост/пользователь. See Раздел 4.3.1, «Синтаксис команд GRANT и REVOKE».
  •  В MySQL используется протокол связи между клиентом и сервером со сжатием данных, что увеличивает производительность системы в условиях низкоскоростных каналов связи.
  •  Насколько нам известно, только в реляционной системе баз данных MySQL Server используется концепция ``обработчика таблиц''. Благодаря этому создается возможность работы с различными низкоуровневыми типами таблиц из ядра MySQL, причем каждая таблица может быть оптимизирована для различных характеристик производительности.
  •  Все типы таблиц в MySQL (кроме InnoDB) реализованы в виде файлов (по одной таблице в файле), что значительно облегчает создание резервных копий, перенос, удаление и даже создание символьных ссылок между базами данных и таблицами, даже если сервер находится в нерабочем состоянии.
  •  Наличие утилиты для восстановления и оптимизации таблиц MyISAM (наиболее распространенного типа таблиц в MySQL). Ее использование требуется только в случае физического повреждения файла данных (например, в результате аппаратного сбоя). Позволяет восстановить большую часть данных.
  •  Обновление (апгрейд) MySQL проходит совершенно ``безболезненно''. При модернизации MySQL нет нужды в сохранении/восстановлении данных, что приходится делать при установке большинства обновлений PostgreSQL.

Недостатки MySQL по сравнению с PostgreSQL:

  •  Поддержка транзакций в MySQL пока что не настолько хорошо проверена, как в системе PostgreSQL.
  •  Так как MySQL основан на использовании потоков (threads), пока что еще не безошибочно работающих в некоторых ОС, для обеспечения стабильной работы приходится либо использовать один из откомпилированных пакетов, доступных по адресу http://www.mysql.com/downloads/, либо точно выполнять содержащиеся в Раздел 2.3, «Установка исходного дистрибутива MySQL» инструкции.
  •  Блокировка таблиц, применяющаяся в нетранзакционных таблицах MyISAM, во многих случаях работает быстрее, нежели блокировки на уровне страниц, строк или контроль версий. Недостаток этого подхода в том, что если не учитывать механизм работы блокирования таблиц, один длительный запрос может надолго заблокировать таблицу. Обычно этого эффекта можно избежать, приняв соответствующие меры при разработке приложения. Если это не удастся, всегда можно изменить тип таблицы и сделать ее транзакционной. See Раздел 5.3.2, «Вопросы блокирования таблиц».
  •  При помощи UDF (user-defined functions, определяемые пользователем функции) возможности MySQL можно расширить и дополнить обычными SQL-функциями или их объединениями. Но это сделать не так просто, да и система не настолько гибка в этом отношении, как PostgreSQL. See Раздел 9.2, «Добавление новых функций в MySQL».
  •  В MySQL сложнее организовывались обновления, затрагивающие несколько таблиц сразу. Впрочем, это было исправлено в MySQL 4.0.2 реализацией многотабличного UPDATE и в MySQL 4.1 - с помощью подзапросов. В MySQL 4.0 можно одновременно удалять данные из нескольких таблиц. See Раздел 6.4.6, «Синтаксис оператора DELETE».

Ниже перечислены преимущества PostgreSQL по сравнению с MySQL на сегодняшний день.

Так как нам известен план разработки новых версий MySQL, мы включили в приведенную ниже таблицу версии MySQL, в которых будет реализована поддержка соответствующих возможностей. К сожалению, в сопоставлении мы сделать этого не могли, так как план разработки PostgreSQL нам неизвестен.

Возможность

Версия MySQL 

Подзапросы

4.1

Внешние ключи

5.0 (3.23 с InnoDB)

Представления

5.0

Хранимые процедуры

5.0

Триггеры

5.0

Объединения

4.0

Полные связи

4.1

Ограничения

4.1 или 5.0

Курсоры

4.1 или 5.0

R-деревья

4.1 (для таблиц MyISAM)

Наследование таблиц

Не планируется

Расширяемая система типов

Не планируется

Другие причины, по которым можно предпочесть PostgreSQL:

  •  В некоторых случаях PostgreSQL оказывается ближе к ANSI SQL.
  •  Работу PostgreSQL можно ускорить, выполняя код в виде хранимых процедур.
  •  При хранении географических данных R-деревья дают PostgreSQL преимущество перед MySQL (примечание: в MySQL версии 4.1 для таблиц MyISAM реализована поддержка R-деревьев).
  •  Оптимизатор PostgreSQL в некоторых случаях способен дать лучший в сравнении с существующим на сегодняшний день оптимизатором MySQL результат. Особенно это заметно при слиянии таблиц без соответствующих ключей или при слиянии с использованием разных ключей в сочетании с логическим оператором OR. Набор результатов тестов скорости MySQL, расположенный по адресу http://www.mysql.com/information/benchmarks.html покажет, каких конструкций следует избегать при работе с различными базами данных.
  •  Команда разработчиков PostgreSQL, пишущих код для сервера, больше.

Недостатки PostgreSQL по сравнению с MySQL:

  •  VACUUM затрудняет использование PostgreSQL в постоянно работающих системах.
  •  Наличие только транзакционных таблиц.
  •  Значительно более медленная работа команд INSERT, DELETE и UPDATE.

5.1.4. Набор тестов MySQL (The MySQL Benchmark Suite)

В данном разделе будет находиться техническое описание набора эталонных тестов MySQL (и crash-me), но оно пока еще не написано. В настоящее время можно получить хорошее представление об эталонном тесте, глядя на код и результаты в каталоге sql-bench любого исходного дистрибутива MySQL.

Данный набор эталонных создан с целью обеспечить эталонный тест, который будет информировать любого пользователя о том, что в данной реализации SQL выполняется хорошо, а что плохо.

Обратите внимание: этот эталонный тест - однопоточный, так что в нем измеряется минимальное время выполнения операций. В будущем мы планируем добавить в данный набор большое количество многопоточных тестов.

Например (выполнено на одной машине под NT 4.0):

Чтение 2000000 строк по индексу

Секунды

Секунды 

mysql

367

249

mysql_odbc

464

db2_odbc

1206

informix_odbc

121126

ms-sql_odbc

1634

oracle_odbc

20800

solid_odbc

877

sybase_odbc

17614

Вставка 350768 строк

Секунды

Секунды 

mysql

381

206

mysql_odbc

619

db2_odbc

3460

informix_odbc

2692

ms-sql_odbc

4012

oracle_odbc

11291

solid_odbc

1801

sybase_odbc

4802

В предыдущем тесте MySQL запускался с 8-мегабайтным индексным кэшем.

Гораздо больше результатов тестов вы сможете найти по адресу http://www.mysql.com/information/benchmarks.html.

Обратите внимание: данные об Oracle отсутствуют - по просьбе компании Oracle вся информация по их продукту была удалена. Все эталонные тесты для Oracle должны быть пропущены через компанию Oracle! Мы считаем, однако, что при таком способе тестирования результаты эталонных тестов для Oracle будут в очень высокой степени различаться, поскольку приведенные на сайте результаты призваны показывать на что способна стандартная инсталляция для одного клиента.

Чтобы выполнить набор эталонных тестов, необходимо загрузить исходный дистрибутив MySQL, установить драйвер perl DBI, драйвер perl DBD для той базы данных, которую нужно проверить, а затем выполнить:

cd sql-bench

perl run-all-tests --server=#

где # - один из поддерживаемых серверов. Список всех опций и поддерживаемых серверов можно получить, выполнив run-all-tests --help.

Программа crash-me пытается определить, какие функции поддерживаются СУБД, и какие возможности и ограничения имеют эти функции при выполнении запросов. Например, она определяет следующее:

  •  какие типы столбцов поддерживаются
  •  сколько индексов поддерживается
  •  какие функции поддерживаются
  •  насколько большим может быть запрос
  •  насколько большим может быть столбец VARCHAR 


 

А также другие работы, которые могут Вас заинтересовать

11844. Методы безусловной оптимизации 170 KB
  Лабораторная работа: Методы безусловной оптимизации ЦЕЛЬ РАБОТЫ Цель лабораторной работы закрепление навыков исследования функций на выпуклость решение задач на нахождение безусловного экстремума выпуклой функции аналитически и численными методами...
11845. Особенности правовых ограничений, накладываемых на должника в ходе исполнительного производства 664 KB
  Система органов принудительного исполнения по своему социальному назначению и месту в системе в системе органов государственной власти Российской Федерации призвана обеспечить реализацию правовых норм с помощью мер правового принуждения в действиях участников правовых отношений
11846. Поколения мобильного интернета 145 KB
  Во всех аналоговых стандартах применяются частотная модуляция для передачи речи и частотная манипуляция для передачи информации управления (или сигнализации - signaling). Для передачи информации различных каналов используются различные участки спектра частот...
11847. Логические элементы цифровых вычислительных устройств 103.5 KB
  Лабораторная работа №1 Логические элементы Теоретическое введение Известно что математической основой цифровых вычислительных устройств является двоичная арифметика в которой используются всего два числа 0 и 1. Выбор двоичной системы счисления диктовался т...
11848. Арифметические сумматоры 59 KB
  Лабораторная работа №2 Арифметические сумматоры Теоретическое введение Арифметические сумматоры являются составной частью так называемых арифметикологических устройств ЛЛУ микропроцессоров МП. Они используются также для формирования физического адреса
11849. Логический элемент с тремя состояниями 68 KB
  Лабораторная работа №3 Логический элемент с тремя состояниями Теоретическое введение. Схема логического элемента с тремя состояниями заимствована из монографии и несколько модифицирована с учетом возможностей программы ЕWB. За основу взят базовый элемент сери...
11850. Мультиплексоры и демультиплексоры и их значение 62.5 KB
  Мультиплексоры и демультиплексоры Теоретическое введение. Назначение мультиплексоров от английского multiplex многократный коммутировать в заданном порядке сигналы поступающие с нескольких входных шин на одну выходную. У мультиплек
11851. Шифраторы (кодеры) и дешифраторы 55.5 KB
  Лабораторная работа №5 Шифраторы и дешифраторы Теоретическое введение Шифраторы кодеры используются чаще всего для преобразования десятичных чисел в двоичный или двоичнодесятичный код например в микрокалькуляторах в которых нажатие десятичной клавиши со
11852. Цифровой компаратор 81.5 KB
  Лабораторная работа №6 Цифровой компаратор Теоретическое введение Цифровые компараторы от английского compare сравнивать выполняют сравнение двух чисел А В одинаковой разрядности заданных в двоичном или двоичнодесятичном коде. В зависимости от схемного исп...