Первичный ключ таблицы памяти должен быть 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
Означает ли это, мне нужно создать еще один ключ (
a
) для таких запросов?Почему первичный ключ не может быть индексом 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