金岡勲
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を使ったテーブルの方が取得速度が速いです。 こちらはラッパーモードの仕様でしょうか。もし可能でしたら、インデックスが使われるように していただけると助かります。 以上、よろしくお願い致します。