Каталог статей
Поиск по базе статей  
Статья на тему Интернет » Интересное в сети » Выбор типов полей в&nb p;MySQL

 

Выбор типов полей в&nb p;MySQL

 

 

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

загрузка...

 

 



Конечно, в самом простом случае любую информацию можно представить в виде символьной строки, и таким образом хранить все данные, описав так все поля. Сервер MySQL поддерживает автоматический перевод данных в необходимый контекст — в зависимости от операции, производимой над полем. Например, используя арифметический оператор "+", при сложении «3»+"4" мы получим результат 7, как и ожидали. Но надо ли говорить, что при этом неявном преобразовании также требуются машинные ресурсы? Кроме этого, не следует забывать также и о разнице в сортировке символьных и числовых данных. В первом случае «9» будет в отсортированном списке стоять после «11», и чтобы сделать сортировку как для чисел, нам потребуется сделать преобразование данных поля при задании условий сортировки: ORDER BY number + 0. Помимо затрат на неявное преобразование, следует также помнить о том, что числовые данные обрабатываются сервером баз данных всегда быстрее, чем символьные. Все это указывает на то, что нам следует задуматься о правильном выборе типов столбцов еще на этапе проектирования базы данных. Используйте типы, которые занимают меньше места Две главные проблемы, которые побуждают нас оптимизировать работу сервера с базой данных — это скорость и объем занимаемого дискового пространства. Очень часто решения этих проблем являются взаимоисключающими, но иногда даже простая оптимизация данных может улучшить обе эти характеристики. Как уже упоминалось выше, численные данные всегда обрабатываются сервером баз данных быстрее символьных, поэтому все поля, в которых предполагается хранить цифровую информацию, следует создать с объявлением соответствующего типа: INT, FLOAT и так далее. Но и этого мало — надо сразу определить диапазон возможных значений поля и задать тип, который будет занимать как можно меньше места на диске. Это позволит сэкономить дисковое пространство — ведь на каждое значение у нас будет отводиться меньше места, — а также увеличит производительность, так как более короткие поля будут обрабатываться быстрее.

Для типа INTEGER существуют синонимы с предустановленными ограничениями на размер хранимых данных: TYNINT, который занимает 1 байт и позволяет хранить данные в диапазоне от -128 до 127; SMALLINT, размер которого уже 2 байта, а диапазон данных от -32768 до 32768; MEDIUMINT, с размером 3 байта; INT — 4 байта; BIGINT — 8 байт. Для большинства небольших проектов, даже для каталогов продукции, вполне может хватить диапазона чисел, предоставляемого типом SMALLINT, тем более что, объявив его беззнаковым (SMАLLINT UNSIGNED), мы получим диапазон возможных значений от 0 до 65535. Точно так же следует задуматься об использовании типов для чисел с плавающей запятой, где тип FLOAT (4 байта) в использовании предпочтительней, чем тип DOUBLE (8 байт). При проектировании таблицы нужно выбрать тип, который покроет все потребности, но если на этапе эксплуатации его диапазона не хватит, то эту ситуацию всегда можно исправить с помощью оператора ALTER TABLE, изменив тип столбца.

Типы с фиксированной длинной обрабатываются быстрее, но занимают больше места Если в случае цифровых данных уменьшение размера поля приводило как к увеличению производительности, так и экономии дискового пространства, то в случае символьных значений ситуация несколько иная. Для символьных полей можно использовать типы CHAR для символьных полей с фиксированной длинной (строка, которая занимает меньше места, все равно будет занимать все отведенное для нее место) и VARCHAR, TEXT (или BLOB, если при сортировке данных необходимо учитывать регистр) для строк с переменной длиной, где один или несколько байтов выделено для хранения длины строки. Строки с фиксированной длиной быстрее обрабатываются сервером баз данных, а строки с переменной длиной занимают меньше дискового пространства. Однако при частой модификации базы данных в случае строк с переменной длиной есть опасность фрагментации, что требует частой оптимизации таблицы.

Надо сказать, что для строк с длиной более 255 символов мы можем использовать только типы с переменной длиной — TEXT, MEDIUMTEXT и LONGTEXT (соответственно в них выделено 2, 3 и 4 байта на хранение длинны строки). Помимо такого простого выбора между типами строковых данных, необходимо также тщательно проанализировать хранимую информацию. Возможно, данные, хранимые в поле, можно представить в виде конечного списка с одним или несколькими выборами значений. В этом случае можно воспользоваться типами ENUM и SET, которые обрабатываются как целочисленные типы, что позволяет также увеличить производительность и сэкономить дисковое пространство.

Поля типа TEXT (BLOB) требуют более осторожного обращения. Как правило, это поля, которые содержат большие объемы информации, и следует избегать как их индексирования, так и неявной их выборки с помощью оператора SELECT *. Возможно, более оптимальным решением при необходимости их использования было бы хранить их в отдельной таблице, извлекая их только при явной необходимости.

Объявляйте поля как NOT NULL Поля всех типов по возможности нужно стремиться объявлять как NOT NULL, указывая, что они не могут иметь пустого значения. С одной стороны, это экономит 1 бит на строку, но с другой, что гораздо важнее, позволит увеличить производительность при выполнении запросов, так как сервер баз данных не будет проверять такие столбцы на предмет наличия пустых значений. Более того, в ранних версиях MySQL столбцы, не объявленные, как NOT NULL, вообще не могли индексироваться. Сейчас эта ситуация исправлена, но этого крайне не рекомендуется делать. Необходимость использования значений NULL встречается крайне редко, и всегда может быть обойдена заданием своего специального значения для указания ситуации, что поле не содержит значения. Для цифровых данных это может быть 0, для символьных — пустая строка «», для полей времени "0000-00-00" и так далее. В любом случае, это не намного усложнит обработку запросов, но позволит производить ее более быстро.

Для хранения времени и дат, используйте специализированные типы Помимо цифровых и символьных типов полей, в MySQL существуют также типы полей для хранения даты и времени: DATE, TIME, DATETIME, TIMESTAMP и YEAR. Обработка значений времени часто имеет свои особенности и логику, поэтому будет не совсем оптимальным создавать собственный формат хранения времени, и обрабатывать такие данные веб-скриптом. Будет гораздо эффективнее передать обработку значений даты и времени самому серверу, тем более что в MySQL есть достаточно большой набор функций для работы с данными типа «дата» и «время» — как для вычислений, сравнений и изменений, так и для отображения и извлечения части хранимой в поле информации — например, с помощью функции YEAR() из поля DATETIME. Но при использовании этих типов тоже стоит задуматься, какие из них или, возможно, их комбинации выгоднее применить — поля DATE и TIME занимают по 3 байта, в то время как поле DATETIME — 8 байт, но хранение всей временной информации в одном поле может быть более предпочтительным для последующей обработки. Также не следует забывать о возможности использовать поле YEAR, которое занимает всего лишь 1 байт.

В некоторых случаях полезным будет также получить информацию с рекомендацией по корректированию типов столбцов от самого сервера баз данных MySQL для наполненной таблицы с помощью функции PROCEDURE ANALYZE():

SELECT * FROM имя_таблицы PROCEDURE ANALYZE();

Таким образом, общие рекомендации по использованию типов полей можно свести к следующим принципам:
— не используйте символьные поля для цифровых данных;
— используйте столбцы фиксированной длины;
— используйте как можно более короткие столбцы;
— не забывайте объявлять столбцы как NOT NULL;
— по возможности используйте типы ENUM и SET;
— избегайте выборки полей с типами TEXT (BLOB) и по возможности храните их в отдельных таблицах;
— используйте типы даты и времени;
— не забывайте оптимизировать таблицы, подверженные частым изменениям, и проверяйте характеристики столбцов уже наполненных таблиц.

Ссылки по теме




Статья получена: hostinfo.ru
загрузка...

 

 

Наверх


Постоянная ссылка на статью "Выбор типов полей в&nb p;MySQL":


Рассказать другу

Оценка: 4.0 (голосов: 16)

Ваша оценка:

Ваш комментарий

Имя:
Сообщение:
Защитный код: включите графику
 
 



Поиск по базе статей:





Темы статей






Новые статьи

Противовирусные препараты: за и против Добро пожаловать в Армению. Знакомство с Арменией Крыша из сэндвич панелей для индивидуального строительства Возможно ли отменить договор купли-продажи квартиры, если он был уже подписан Как выбрать блеск для губ Чего боятся мужчины Как побороть страх перед неизвестностью Газон на участке своими руками Как правильно стирать шторы Как просто бросить курить

Вместе с этой статьей обычно читают:

DATA-кабели: типы, рекомендации по выбору и порядок подключения

Вы купили мобильный телефон. Что дальше? Наверное, большинству хочется закачать свои мелодии и картинки, скачать с телефона фотографии.

» Ноутбуки, КПК и телефоны - 2070 - читать


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

Если помните, мы уже писали о замечательных свойствах Ветонита. Правда, касалось это только одной его разновидности – Ветонита для полов. Но, как оказалось, в семейство материалов под названием Ветонит входят еще и смеси для стен и потолков, клеи для плитки и многое-многое другое.

» Разное - 3885 - читать


Толщина керамической плитки - прагматика выбора. Советы по выбору плитки для пола

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

» Разное - 11237 - читать


Блиц-опрос К вопросу о выборе пола

1. Какие виды напольных покрытий, на ваш взгляд, больше подходят для загородного дома? 2.

» Обустройство дома - 4771 - читать


Выбор пола ребенка до зачатия

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

» Беременность и роды - 3038 - читать



Статья на тему Интернет » Интересное в сети » Выбор типов полей в&nb p;MySQL

Все статьи | Разделы | Поиск | Добавить статью | Контакты

© RusAdvice.Org, 2006-2014, при копировании материалов, прямая индексируемая ссылка на сайт обязательна.

Энциклопедия RusAdvice.Org