[groonga-dev,00653] ラッパーモードにおける全行数取得について

Back to archive index

金岡勲 dev.i****@gmail*****
2011年 12月 9日 (金) 17:42:49 JST


初めまして。金岡と申します。

mroongaのラッパーモードにおける全行数取得についてなのですが、
インデックスが使われないようです。

InnoDBのラッパーモードを使ったテーブルで確認しました。
InnoDBのテーブルも用意して、同じ構造、同じデータ(約70万件)にして
全行数取得してみました。

環境:
CentOS5.6.0+MySQL5.5.17+mroonga1.10

# InnoDB用テストテーブル
create table Tbl_Innodb(
   id   CHAR(10) NOT NULL PRIMARY KEY,
   data VARCHAR(200) DEFAULT '',
   flag TINYINT(2)
) ENGINE=InnoDB;
create index Idx1 on Tbl_Innodb(flag);

#InnoDBラッパーモード用テストテーブル
create table Tbl_Wrapper(
   id   CHAR(10) NOT NULL PRIMARY KEY,
   data VARCHAR(200) DEFAULT '',
   flag TINYINT(2)
) ENGINE=groonga COMMENT = 'ENGINE "InnoDB"';
create index Idx1 on Tbl_Wrapper(flag);

InnoDBテーブルではインデックスが使われますが、

mysql> explain select count(*) from Tbl_Innodb;
+----+-------------+------------+-------+---------------+------+---------+------+--------+-------------+
| id | select_type | table      | type  | possible_keys | key  | key_len |
ref  | rows   | Extra       |
+----+-------------+------------+-------+---------------+------+---------+------+--------+-------------+
|  1 | SIMPLE      | Tbl_Innodb | index | NULL          | Idx1 | 2       |
NULL | 694271 | Using index |
+----+-------------+------------+-------+---------------+------+---------+------+--------+-------------+

ラッパーモードでは使われません。

mysql> explain select count(*) from Tbl_Wrapper;
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------+
| id | select_type | table       | type | possible_keys | key  | key_len |
ref  | rows   | Extra |
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------+
|  1 | SIMPLE      | Tbl_Wrapper | ALL  | NULL          | NULL | NULL    |
NULL | 726179 |       |
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------+

force indexを使ってもexplainに表れません。
また、インデックスが使われている列でカウントしても使われません。

mysql> explain select count(flag) from Tbl_Wrapper;
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------+
| id | select_type | table       | type | possible_keys | key  | key_len |
ref  | rows   | Extra |
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------+
|  1 | SIMPLE      | Tbl_Wrapper | ALL  | NULL          | NULL | NULL    |
NULL | 726179 |       |
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------+

セカンダリインデックスが使われないためか、InnoDBを使ったテーブルの方が取得速度が速いです。
こちらはラッパーモードの仕様でしょうか。もし可能でしたら、インデックスが使われるように
していただけると助かります。

以上、よろしくお願い致します。



groonga-dev メーリングリストの案内
Back to archive index