Эффективность использования дискового пространства

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

Стоимость

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

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

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

Различия в клиент-серверных коммуникационных протоколах mSQL и MySQL

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


Ниже приведены наиболее заметные различия между коммуникационными протоколами MySQL и mSQL:

· В буфере сообщения может находиться несколько столбцов результатов.

· Буферы сообщений динамически увеличиваются, если запрос или результат не умещаются в их текущем объеме, ограничение на объем буфера устанавливается сервером и клиентом.

· Все пакеты нумеруются, что позволяет обнаружить среди них повторяющиеся или пропуски.

· Все значения столбцов отправляются в виде ASCII. Длины строк и столбцов посылаются в упакованном виде в двоичном виде (1, 2 или 3 байта).

· MySQL может считывать результаты без буферизации (без необходимости сохранения всех данных в клиенте).

· Если одна операция считывания/записи занимает более 30 секунд, сервер закрывает соединение.

· Если соединение бездействует в течение 8 часов, сервер его закрывает.


Различия в синтаксисе SQL между mSQL 2.0 и MySQL

Типы столбцов

MySQL

Имеются следующие дополнительные типы:

· ENUM - тип для одного набора строк.

· SET - тип для нескольких наборов строк.

· BIGINT - тип для 64-битовых целых чисел.

Кроме того, MySQL поддерживает следующие атрибуты дополнительных типов:

· UNSIGNED - опция для целочисленных столбцов и столбцов чисел с плавающей запятой.

· ZEROFILL - опция для целочисленных столбцов.

· AUTO_INCREMENT - опция для целочисленных столбцов, являющихся первичными ключами.

· DEFAULT - значение для всех столбцов.

mSQL2

Типы столбцов в mSQL соответствуют приведенным в таблице типам MySQL:

Тип в mSQL Соответствующий тип в MySQL
CHAR(len) CHAR(len)
TEXT(len) TEXT(len). len - максимальная длина. Работает LIKE.
INT INT. Со множеством опций!
REAL REAL. Или FLOAT. Имеются как 4-битовые, так и 8-битовые варианты.
UINT INT UNSIGNED
DATE DATE. Использует формат ANSI SQL, а не собственный формат mSQL.
TIME TIME
MONEY DECIMAL(12,2). Значение с фиксированной точкой и двумя знаками после нее.

Создание индексов

MySQL

Индексы могут указываться во время создания таблицы при помощи оператора CREATE TABLE.

mSQL

Индексы создаются после создания таблицы с помощью операторов CREATE INDEX.

Сравнение значений NULL

MySQL

MySQL соответствует стандарту ANSI SQL, поэтому сравнение с NULL всегда возвращает результат NULL.

mSQL

В mSQL выражение NULL = NULL имеет значение TRUE. Поэтому при переводе старого кода из mSQL в MySQL =NULL необходимо заменить на IS NULL, а <>NULL - на IS NOT NULL.


Поиск без учета регистра символов

MySQL

LIKE может быть как чувствительным, так и нечувствительным к регистру оператором, в зависимости от столбцов, к которым он применяется. По возможности MySQL использует индексы, если аргумент LIKE не начинается с шаблонного символа.

mSQL

Следует использовать CLIKE.


Обработка концевых пробелов

MySQL

Все пробелы в конце столбцов CHAR и VARCHAR удаляются. Если такое поведение нежелательно, используйте столбцы TEXT.

mSQL

Концевые пробелы сохраняются.

Операторы WHERE

MySQL

MySQL правильно определяет приоритеты действий (AND имеет приоритет перед OR). Заставить MySQL вести себя так, как mSQL, можно при помощи скобок (как можно видеть в соответствующем примере).

mSQL

Все действия производятся слева направо. А это значит, что некоторые логические вычисления, в которых наличествует более трех аргументов, не могут быть выполнены вообще. Кроме того, это означает, что при переносе в MySQL некоторые запросы необходимо менять. Это довольно просто сделать при помощи скобок. Возьмем, к примеру, следующий запрос mSQL:


mysql> SELECT * FROM table WHERE a=1 AND b=2 OR a=3 AND b=4;


Чтобы MySQL вычислил результат этого запроса так же, как это сделал бы mSQL, нужно расставить скобки:


mysql> SELECT * FROM table WHERE (a=1 AND (b=2 OR (a=3 AND (b=4))));

Ограничения доступа

MySQL

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

mSQL

Имеется файл "mSQL.acl", в котором можно определить привилегии чтения/записи для пользователей.

Наши рекомендации