Вы здесь

Schema API Indexes что означают цифры в индексе

0

Вот пример из документации.

$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'),
Версия Drupal: 
7.x
Категория: 
Schema API
Вопрос задан 07.10.2015 - 02:34

Ответы

2

первые четыре байта поля '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'
Ответ дан 07.10.2015 - 08:20

Смотришь в книгу, видишь фигу. Спасибо.

Комментарий оставлен 07.10.2015 - 17:27
1

Мое предположение - это длинна ключа
Я так понимаю, ограничение на длинну символа задается для более эффективных операций при работе с 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)],... )

По этой теме плаваю - поэтому нужны правки.

Ответ дан 07.10.2015 - 04:42
0

Количество симовлов поля для индексации

Ответ дан 07.10.2015 - 10:37