2013-07-26 28 views
1

我想使用一個內存表作爲一組隊列。內存表的主鍵必須是HASH,爲什麼?

所以,就會有與INT列A和B的存儲器表。
與像查詢:
SELECT B,從表,其中A =? ORDER經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. 爲什麼主鍵不能是B樹索引?如果我將主鍵更改爲常規鍵,有什麼區別?

回答

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

相關問題