Первичный ключ таблицы памяти должен быть HASH, почему?

Я хочу использовать таблицу памяти в качестве набора очередей.

Таким образом, будет таблица памяти со столбцами int a и b.
с такими запросами, как:
ВЫБЕРИТЕ b ИЗ таблицы ГДЕ a=? ЗАКАЗАТЬ НА DESC LIMIT 1000

Я попробовал это:

create table `test_table` (
    `a` int(11) not null,
    `b` int(11) not null,
    primary key (`a`,`b`) using btree
) engine=memory

но первичный ключ все еще HASH:

show index from `test_table`

Table       Non_unique  Key_name  Seq_in_index  Column_name  Collation  Cardinality  Sub_part  Packed  Null    Index_type  Comment
----------  ----------  --------  ------------  -----------  ---------  -----------  --------  ------  ------  ----------  -------
test_table           0  PRIMARY              1  a            (NULL)          (NULL)    (NULL)  (NULL)          HASH
test_table           0  PRIMARY              2  b            (NULL)               0    (NULL)  (NULL)          HASH
  1. Означает ли это, мне нужно создать еще один ключ (a) для таких запросов?

  2. Почему первичный ключ не может быть индексом BTREE? Какая разница, если я заменю первичный ключ на обычный ключ?

1 ответ

Вы можете изменить тип индекса с помощью запроса alter.

ALTER TABLE test_table DROP PRIMARY KEY, ADD PRIMARY KEY USING BTREE (a,b);

ИЛИ Используя ниже создать запрос,

create table test_table (a int(11) not null,b int(11) not null,primary key USING BTREE(a,b)) engine=memory

Для получения более подробной информации о двигателе памяти перейдите по ссылке ниже. http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

Другие вопросы по тегам