7 советов по использованию MySQL

1. Тип базы данных

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

С версии MySQL 5.5 данный тип базы данных используется по умолчанию.

2. Кэширование

MySQL не кэширует запросы с динамичными данными, например при использовании CURDATE(). Поэтому рекомендуется формировать данные для SQL-запроса (например дату) внешне от MySQL.

Список методов, при использовании которых SQL-запрос не кешируется, указан на официальном сайте под строкой «A query cannot be cached if it uses any of the following functions»: dev.mysql.com/doc/refman/5.5/en/query-cache-operation.html.

3. Данные банковских карт

В MySQL нельзя хранить данные банковских карт (например, VISA, MasterCard), и выводить их на сайте. Чтобы иметь возможно хранить и обрабатывать данные банковских карт на своём сервисе, надо пройти сертификацию PCI DSS.

При этом можно хранить, например, последние 4 цифры.

4. Выборка всех полей

Не рекомендуется выбирать данные через символ *, т.к. идёт выборка ненужных полей, что может замедлить работу MySQL.

/* не рекомендуется */
SELECT * FROM posts

/* рекомендуется */
SELECT id, title, content FROM posts

5. Кодировка

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

Есть несколько типов кодировки UTF-8, рекомендуется использовать «utf8mb4_unicode_ci».

Строка «mb4» говорит о том, то в данную кодировку входят 4-байтовые символы (т.е. поддерживается больше юникод-символов). А строка «ci» говорит о том, сравнение строк происходит без учёта регистра.

Раньше использовали «utf8_general_ci», которая является более упрощённой версией «utf8_unicode_ci», но сейчас рекомендуется использовать «utf8mb4_unicode_ci».

6. Индексы

Индексы позволяют быстрее выбирать данные. В каждом SQL-запросе рекомендуется указывать выборку хотя бы по одной из полей с индексом (например category_id, user_id).

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

7. Добавление нескольких данных

Если надо добавить несколько данных, то их рекомендуется добавлять одним запросом.

/* Не рекомендуется */
INSERT INTO users (name, email) VALUES ('Антон', 'anton@example.ru');
INSERT INTO users (name, email) VALUES ('Мария', 'masha@example.ru');

/* Рекомендуется */
INSERT INTO users (name, email)
VALUES ('Антон', 'anton@example.ru'), ('Мария', 'masha@example.ru');