Длина поля cck в БД

Главные вкладки

Аватар пользователя Тыдж Тыдж 16 ноября 2009 в 2:49

уже была похожая тема но очень давно и вывод я так и не понял.
суть: если не задавать в поле cck значение максимальной длины поля (Maximum length)то ему присваивается тип longtext, если присвоить нарочно длину 50 символов то размер поля уменьшится и станет varchar(50).
Лучше будет это или хуже? по идее нагрузка должна уменьшиться.

вселяет сомнения вот этот код из cck/modules/text/text.module:

    case 'database columns':
      if (empty($field['max_length']) || $field['max_length'] > 255) {
        $columns['value'] = array('type' => 'text', 'size' => 'big', 'not null' => FALSE, 'sortable' => TRUE, 'views' => TRUE);
      }
      else {
        $columns['value'] = array('type' => 'varchar', 'length' => $field['max_length'], 'not null' => FALSE, 'sortable' => TRUE, 'views' => TRUE);
      }
      if (!empty($field['text_processing'])) {
        $columns['format'] = array('type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE, 'views' => FALSE);
      }
      return $columns;

что он делает в точности? мне кажется - определяет размер поля уже для формируемой страницы, поэтому неважно, какой тип поля в базе.
но важен ли сам тип поля и размер для быстроты поиска по базе и стоит ли указывать maximum length для поля в cck?

Комментарии

Аватар пользователя Обухов Никита Обухов Никита 16 ноября 2009 в 15:55

Если укажите 50, в БД под поле отводится varchar(50)

Если в поле будет что-то больше, то при вставке в БД оно обрежется

Лучше ставить фиксированную длину.

Аватар пользователя Тыдж Тыдж 16 ноября 2009 в 19:29

спасибо, я так и думал. жду еще пару человек для окончательного выяснения, и расшифруйте что делает этот кусок кода

Аватар пользователя Dan Dan 16 декабря 2009 в 5:17

если длина поля не указана или больше 255
устанавливаем размер в big (longtext, 4 GB)
иначе
varchar[размер] (varchar, 255 B or 64 KB)
если установлена опция фильтра
добавить для неё поле

Размеры полей: http://drupal.org/node/159605

Очевидно, что поиск будет зависеть, в первую очередь, от размера реальных данных в Ваших полях, то есть если в поле text-big хранить по две буквы, а в varchar - по предложению, то поиск должен быть быстрее в первом случае. Но я не знаю каковы накладные расходы на работу с текстовыми полями большой длины и какие механизмы используются для поиска - если одинаковы и не зависят от размера поля, то разница не должна быть большая, в противном случае - хз ))