→

MySQL →  То, что нужно знать при проектировании БД (9 правил).

Ну что, дети мои, займемся сегодня дрочерством?

1. Не используйте в качестве идентификаторов тип INT(11) SIGNED. Тип INT(10) SIGNED позволяет хранить числовые данные до 2-ух миллиардов (причем поскольку тип SIGNED, то отрицательная половина пространства никогда не будет использована), что практически недостижимо, а занимает 4 байта на каждую запись. Это лишние затраты памяти, времени процессора и пространства.

Используйте менее накладные типы:
TINYINT UNSIGNED — для небольших таблиц, признаков активности, различных маркеров
SMALLINT UNSIGNED — для средних таблиц (новости, города и тд)
MEDUIMINT UNSIGNED — в крайнем случае для больших таблиц.



http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

2. Для дат MySQL имеет сразу 3 специализированных типа: DATETIME, DATE,
TIMESTAMP и именно их стоит использовать для хранения даты.

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html

3. IP-адреса лучше хранить в INT(10) UNSIGNED (UNSIGNED обязательно), для преобразования
адресов существуют специальные функции в MySQL.
mysql> SELECT INET_ATON('209.207.224.40');
        -> 3520061480


mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
        -> 2130706433, 2130706433


mysql> SELECT INET_NTOA(3520061480);
        -> '209.207.224.40'


http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton

4. Использовать поля типа TEXT и BLOB стоит только если они действительно необходимы. При выборке их нужно указывать только в случае необходимости не только потому что это уменьшает объем передаваемых данных и размер выделяемой памяти, но и потому, что эти типы данных хранятся в БД в виде отдельных объектов и затрачивается дополнительное время на их извлечение. Для небольших текстов стоит использовать VARCHAR, для текстов, длина которых точно известна и постоянна, например MD5, стоит
использовать CHAR(32).

5. Не стоит создавать поля таблицы с признаком NULL, его использование стоит ограничить только для случаев когда это действительно необходимо, по-умолчанию все столбцы должны быть описаны как NOT NULL.

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

7. Индекс UNIQUE и PRIMARY разные индексы. И первый, в отличие от второго, не обеспечивает возможности уникальной идентификации каждой записи.

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

9. Создавать индексы у которых избирательность менее 30% нет смысла. К ним относятся такие поля как активность, статус, видимость и т.д… База данных все равно их использовать не будет.

--
На правах рекламы: Уроки по фотошоп
--
2

Блог им. qubit →  Реклама для задротов Oracle

На сайте http://ora-code.com/ крутится интересная реклама для реальных гурманов Oracle.

1