|
Программирование >> Программный интерфейс приложений
пространства Фрагментация потребует частого запуска optimize table. Такая проблема полностью отсутствует при использовании типов данных с фиксированной длиной. Таблицы со столбцами фиксированной длины, в отличие от таблиц со столбцами переменной длины, проще восстанавливать после разрущения. Эту проблему нельзя отнести к проблемам, связанным с производительностью, но это поможет значительно уменьшить временные затраты на восстановление данных. Преобразование таблиц со столбцами переменной длины в таблицы со столбцами фиксированной длины повысит производительность обработки таких таблиц. Но прежде, чем это сделать, необходимо учесть следующие аспекты. Работа с таблицами, имеющими столбцы фиксированной длины, имеет определенные недостатки. Эти таблицы быстрее, но требуют больше дискового пространства. Так, тип char(n) всегда требует для своего размещения п байт на значение (даже если они будут пустыми или неполными). В то же время тип varchar(n) требует столько пространства, сколько требуется для хранения каждого значения плюс 1 байт для хранения длины значения. Поэтому, выбирая между типами char и varchar, вы делаете выбор между экономией пространства и экономией времени. Если фактор производительности превалирует, выбирайте тип char, если фактор пространства - выбирайте varchar. Изменение только одного столбца переменной длины ничего не дает, здесь возымеет действие только изменение типов всех столбцов Это позволяет создать оператор alter table. В противном случае все усилия окажутся напрасными В некоторых случаях использование типов с фиксированной длиной просто невозможно, например, при длине строк, превышающей 255 символов. Индексируемые типы Наличие индекса ускоряет работу запросов. Таким образом, выбирайте типы, которые можно индексировать. Пустые и непустые типы СУБД MySQL не проверяет на пустые значения столбцы, объявленные как not null. Кроме того, это позволяет сэкономить один бит в строке. Чем проще таблица, тем быстрее она будет обрабатываться Отсутствие пустых значений в столбцах позволит не заботиться об обработке пустых значений как об особом типе данных. Методы увеличения производительности, представленные здесь, иногда вызывают конфликты Так, в терминах поиска строк строки фиксированной длины, содержащие столбцы типа CHAR, будут быстрее, чем строки переменной длины, содержащие столбцы типа VARCHAR Однако первые имеют больще размер, так что работа с ними требует больще дисковой активности С этой точки зрения, тип VARCHAR будет быстрее. Грубо говоря, если не принимать во внимание повыщенный расход дискового пространства, использование столбцов фиксированной длины повышает производительность В более критических случаях можно рассмотреть оба варианта, предварительно протестировав их. Каким образом сравниваются значения? В зависимости от объявления строковые типы сравниваются и сортиру-этся как в чувствительном к регистру режиме, так и наоборот. В табл 2.14 фиведены нечувствительные к регистру строковые типы и их чувствительные к регистру аналоги. Некоторые типы могут быть до-юлнительно объявлены как двоичные (CHAR, VARCHAR) Для этого указывается ключевое слово BINARY. Двоичность других (blob, text) типов вытекает из самой природы типа Таблица 2.14. Чувствительность к регистру строковых типов Недвоичные типы (не чувствительны Двоичные типы (чувствительны к регистру) к регистру) CHAR(M) CHAR(M) BINARY VARCHAR(М) BINARY VARCHAR(М) BINARY TINYTEXT TINYBOLB TEXT BOLB MEDIUMTEXT MEDIUMBOLB LONGTEXT LONGBOLB Обратите внимание, что двоичные (чувствительные к регистру) типы отличаются от соответствующих недвоичных (нечувствительных к регистру) своим поведением в процессе операций сравнения и сортировки. Любой строковый тип может содержать любой тип данных В частности, тип TEXT может содержать двоичные данные. Столбцы могут предположительно использоваться как в чувствительных к регистру операциях, так и в нечувствительных к регистру операциях сравнения. Тут может помочь параметр BINARY. Такая строка будет обрабатываться как двоичная строка. Например, если столбец ту со1 Имеет тип CHAR, то их можно сравнивать разными способами. my col = ABC He реагирует на регистр BINARY my col = ABC Реагирует на регистр my col = BINARY ABC Реагирует на регистр При необходимости сортировать данные не в лексикографическом порядке воспользуйтесь типом enum. Сортировка этого строкового типа происходит в соответствии с порядком значений столбца, указанного в объявлении. Это позволяет настраивать порядок сортировки по желанию. Будете ли вы индексировать столбец? Индексирование позволяет ускорить выборку данных. Эта тема рассматривается детально в главе 4. Оптимизация запросов . Для индексирования выбираются столбцы, которые указываются в предложении where. При создании как простого, так и сложного индекса следует помнить о том, что возможно наличие ограничений, наложенных на выбранные типы. Например, в ранних версиях (до версии 3.23.2) проиндексированные столбцы не могут быть объявлены как not null, кроме того, такие столбцы не могут иметь тип blob или text. Эти ограничения сняты в версии 3.23.2, но если нет возможности перейти на новую версию, придется работать с учетом этих офаничений. Однако есть несколько вариантов обойти эти Офаничения. Можно принять какое-нибудь значение в качестве пустого значения. Например, для столбца типа date в качестве такового можно рассмафивать значение 0000-00-00 . В столбце сфокового типа в качестве пустого значения можно принять пустую сфоку. Для цифрового типа, содержащего неотрицательные значения, значением, эмулирующим пустое значение, может служить значение -1. Данные типа blob и text не индексируются, но если длина сфоки не превыщает 255 символов можно воспользоваться типом varchar. В качестве заменителя типа blob можно воспользоваться типом varchar (255) binary, а заменителя типа text - varchar (255) . Как учесть внутреннюю зависимость при выборе типа столбца Нужно заметить, что все аспекты, принимаемые во внимание при выборке типа данных, нельзя рассматривать независимо друг от друга. Так, например, диапазон значений цифровых данных определенного типа зависит от размера памяти, фебующейся для хранения данных этого типа. Увеличение диапазона значений влечет за собой увеличение объемов памяти. А увеличивая пофебление памяти, мы тем самым влияем на про-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |