2

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

因此,将有一个带有 int 列 a 和 b 的内存表。
查询如下:
SELECT b FROM table WHERE a=? 按 b DESC 限制 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为此类查询创建另一个 key()?

  2. 为什么主键不能是 BTREE 索引?如果我将主键更改为普通键有什么区别?

4

1 回答 1

3

您可以使用 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

于 2013-07-26T06:02:00.863 回答