Вот пример из документации.
$schema['node'] = array(
'description' => 'The base table for nodes.',
'fields' => array(
'type' => array('type' => 'varchar','length' => 32,'not null' => TRUE, 'default' => ''),
'title' => array('type' => 'varchar','length' => 255,'not null' => TRUE, 'default' => ''),
'uid' => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
),
'indexes' => array(
'node_title_type' => array('title', array('type', 4)),
'node_type' => array(array('type', 4)),
'uid' => array('uid'),
),
);
Не могу понять в чем отличие и что означает цифра 4.
'node_type' => array(array('type', 4)),
'node_type' => array('type'),
Ответы
первые четыре байта поля 'type'
из пояснения к примеру кода:
As an example, here is a SUBSET of the schema definition for Drupal's 'node' table. It show four fields (nid, vid, type, and title), the primary key on field 'nid', a unique key named 'vid' on field 'vid', and two indexes, one named 'nid' on field 'nid' and one named 'node_title_type' on the field 'title' and the first four bytes of the field 'type'
Мое предположение - это длинна ключа
Я так понимаю, ограничение на длинну символа задается для более эффективных операций при работе с utf8 данными.
И большая часть данных в данном столбце будет иметь отличия в первых 4-х символах,что обеспечит эффективный поиск,без избыточности если бы использовался индекс из всего столбца
Для столбцов типов CHAR и VARCHAR с помощью параметра col_name(length) могут создаваться индексы, для которых используется только часть столбца (для столбцов BLOB и TEXT нужно указывать длину).
Это запрос в методе public function DatabaseSchema_mysql::addIndex
Функции function db_add_index соответсвенно
$this->connection->query('ALTER TABLE {' . $table . '} ADD INDEX `' . $name . '` (' . $this->createKeySql($fields) . ')');
Оригинальная функция создания индекса (без alter)
CREATE [UNIQUE|FULLTEXT] INDEX index_name
ON tbl_name (col_name[(length)],... )
По этой теме плаваю - поэтому нужны правки.
Количество симовлов поля для индексации
Смотришь в книгу, видишь фигу. Спасибо.