Thread: MySQL (F.A.Q.)
View Single Post
Old 22/01/2014, 05:44 PM   #1
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,742
Reputation: 138
Exclamation MySQL (F.A.Q.)

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

MySQL, мощное средство для хранения и получения большого количества данных. Заметьте не обработки, а именно хранения и получения! Да, на нем можно обрабатывать данные, но пользоваться этим нужно только для получения набора данных из имеющихся.
Если вы надеетесь что MySQL решит все ваши проблемы со скоростью обращения, записи или чтения данных, не обольщайтесь, для получения максимальной производительности не достаточно перенести ваши файлы в базу, далее БД, нужно ещё и правильно спроектировать эту БД. Данная тема поможет вам избежать частых ошибок на начальном этапе перехода на MySQL.

Итак поехали:

Кодировка таблиц

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

Советы:
  • Необязательно указывать кодировку для каждого поля, достаточно выбрать её по умолчанию при создании БД. Она сама будет присваиваться для всех строковых полей и таблиц.

Имена таблиц и столбцов

Общее:
  • Называйте все полными именами.
  • Не используйте префиксы типа p..., h..., b....
  • Не используйте разный регистр букв.
  • Используйте цифры только в крайнем случае.
  • Для разделения слов используйте "_" (землю).
  • Избегайте зарезервированных/системных слов, всегда можно найти слово синоним!

Таблицы:
Называйте таблицы в единственном числе, английскими названиями, например house, player, place. Это упростит понимание того что это за таблица и сделает работу с ней более интуитивной. И упростит интеграцию с сайтом в будущем, если планируется.

Ключи

Общее:
  • Не пренебрегайте созданием ключей, это основное средство которое ускорит работу вашей БД.
  • Если это записи данных у них всегда должен быть уникальный ключ - идентификатор! По нему должны производится обновления данных. Обычно это просто INT поле с ключём AUTO_INCREMENT. Ни когда не пытайтесь исправлять или перезаписывать данное поле самостоятельно, это должна делать только ваша БД без вашего участия.
  • Чем больше ключей в вашей таблице, тем быстрее вы будете получать данные. Это не значит что нужно создавать ключи по каждому полю. При подобном подходе вы получите только разрастающийся файл индексов, но не получите прироста скорости.

Как же создавать ключи:
Все просто, с умом. Например все мы знаем что в SA-MP не могут играть два человека с одинаковыми именами, при чем регистр не учитывается, поэтому для поля с никами игроков вы всегда смело можете создавать уникальный ключ. Для остальных ключей нужно просто посмотреть по каким критериям происходит выборка данных: например дома мы часто получаем по полю владельца, значит навесив на это поле ключ мы сможем быстро находить пустые дома, или мы можем указать у домов город в котором он находится, тогда ключ по этому полю позволит с легкостью находить дома в конкретном городе.
Так же не забывайте что в ключах можно комбинировать несколько полей. Но помните, что чем больше вариантов скомбинированных данных, тем быстрее будет разрастаться таблица индексов.

Дата и время

Общее:
  • Никогда не используйте для записи в БД или сравнения функции NOW(), UNIX_TIMESTAMP() или им подобные! Время на сервере может не соответствовать времени БД. Всегда используйте время на сервере.
  • Заранее определитесь в каком формате вам проще хранить дату и время.
  • БД дает мощнейшие средства для конвертирования даты и времени в любой формат, не пренебрегайте ими.

P.S. Если вас интересует что-то ещё или есть что дополнить, пишите в комментариях, дополню информацию.
__________________________________________________ _________________________________

F.A.Q.

Last edited by Stepashka; 02/06/2015 at 10:38 AM.
Stepashka is offline   Reply With Quote