Naoya Murakami
visio****@gmail*****
2013年 12月 20日 (金) 13:04:14 JST
お世話になっております。村上です。 先日、ベクターカラムのドリルダウンで速度が遅いという 余談をさせていただきました件について、インデックスが 使われてないんじゃないかなぁという疑問点が沸きました。 そこで、テーブル定義を見直したのですが、Mroongaにおける ベクターカラムに対するインデックスの張り方は、 以下の(1)Qiitaに示されているような形をとるのでしょうか? Qiitaの記載がなかったころにテーブル定義をつくっていて、 以下の(2)のテストケースを参考にして作っていました。 Groongaのテーブル構造を見ると、それぞれでインデックス の作られ方が異なっていました。 ひょっとしたら、(2)の張り方にしてて、ドリルダウンで インデックスが使われてないんじゃないかなぁとか考えました。 GroongaのselectコマンドでBugsのtagsをドリルダウンで 集計するのにインデックスが使われるようにできるケース があれば教えてください。 (1)Qiita http://qiita.com/groonga/items/f41cd8cfbe7bd158d5da CREATE TABLE Tags ( name VARCHAR(64) PRIMARY KEY ) DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='default_tokenizer "TokenDelimit"'; CREATE TABLE Bugs ( id INT PRIMARY KEY AUTO_INCREMENT, tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "Tags"', FULLTEXT INDEX(tags) ) DEFAULT CHARSET=utf8; INSERT INTO Bugs (tags) VALUES ("Linux MySQL groonga"); INSERT INTO Bugs (tags) VALUES ("mroonga"); INSERT INTO Bugs (tags) VALUES ("groonga mroonga"); groonga /var/lib/mysql/qiita.mrn table_list | jq . [ 略 [ 258, "Bugs", "/var/lib/mysql/qiita.mrn.0000102", "TABLE_PAT_KEY|PERSISTENT", "Int32", null, null, null ], [ 261, "Bugs-tags", "/var/lib/mysql/qiita.mrn.0000105", "TABLE_PAT_KEY|PERSISTENT", "ShortText", null, "TokenBigram", "NormalizerAuto" ], [ 256, "Tags", "/var/lib/mysql/qiita.mrn.0000100", "TABLE_PAT_KEY|PERSISTENT", "ShortText", null, "TokenDelimit", null ] ] ] % groonga /var/lib/mysql/qiita.mrn select Bugs-tags | jq . [ 略 [ 3, "groonga", 6 ], [ 1, "linux", 1 ], [ 4, "mroonga", 4 ], [ 2, "mysql", 1 ] ] ] ] (2)テストケース https://github.com/mroonga/mroonga/blob/master/test/sql/suite/mroonga/storage/fulltext/groonga/t/varchar_vector.test CREATE TABLE Tags ( name VARCHAR(64) PRIMARY KEY ) DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='default_tokenizer "TokenDelimit"'; CREATE TABLE Bugs ( id INT UNSIGNED PRIMARY KEY, tags VARCHAR(40) COMMENT 'type "Tags", flags "COLUMN_VECTOR"', FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "Tags"' ) DEFAULT CHARSET=utf8; INSERT INTO Bugs (id, tags) VALUES (1, "Linux MySQL"); INSERT INTO Bugs (id, tags) VALUES (2, "MySQL groonga"); INSERT INTO Bugs (id, tags) VALUES (3, "mroonga"); % groonga /var/lib/mysql/github.mrn table_list | jq . 略 [ 258, "Bugs", "/var/lib/mysql/github.mrn.0000102", "TABLE_PAT_KEY|PERSISTENT", "UInt32", null, null, null ], [ 256, "Tags", "/var/lib/mysql/github.mrn.0000100", "TABLE_PAT_KEY|PERSISTENT", "ShortText", null, "TokenDelimit", null ] ] ] % groonga /var/lib/mysql/github.mrn column_list Tags | jq . 略 [ 256, "_key", "", "", "COLUMN_SCALAR", "Tags", "ShortText", [] ], [ 261, "bugs_tags_index", "/var/lib/mysql/github.mrn.0000105", "index", "COLUMN_INDEX|WITH_POSITION|PERSISTENT", "Tags", "Bugs", [ "Bugs.tags" ] ], [ 257, "name", "/var/lib/mysql/github.mrn.0000101", "var", "COLUMN_SCALAR|PERSISTENT", "Tags", "ShortText", [] ] ] ] 以上、よろしくお願いします。