[groonga-dev,02018] Mroongaにおけるベクターカラムのインデックスについて

Back to archive index

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",
      []
    ]
  ]
]

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



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