内存表的主键必须是HASH,为什么?

时间:2013-07-26 04:22:17

标签: mysql memory-table

我想将内存表用作一组队列。

所以,会有一个内存表,其中包含int a和b列。
查询如下:
SELECT b FROM table WHERE a =?订购b 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 个答案:

答案 0 :(得分:2)

您可以使用alter query修改索引类型。

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