2

メモリ テーブルを一連のキューとして使用したいと考えています。

したがって、int 列 a および b を持つメモリ テーブルが存在します。
次のようなクエリで:
SELECT b FROM table WHERE a=? ORDER BY 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ということは、そのようなクエリのために別の key( ) を作成する必要があるということですか?

  2. 主キーを BTREE インデックスにできないのはなぜですか? 主キーを通常のキーに変更した場合の違いは何ですか?

4

1 に答える 1

3

変更クエリを使用して、インデックスの種類を変更できます。

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 に答える