[groonga-dev,01741] mroongaストレージモードにおける1テーブル64個を超えるのインデックスについて

Back to archive index

Naoya Murakami visio****@gmail*****
2013年 9月 3日 (火) 09:54:51 JST


お世話になっております。村上です。

MySQLでは、1つのテーブルのインデックス数の上限が64個に設定されています。
64個を超えるインデックスを作ろうとすると、
#1069 - Too many keys specified; max 64 keys allowed
といわれます。

この設定値は、5.7.1からはcmakeのオプション-DMAX_INDEXS=N、
configureであれば、--with-max-indexes=Nを指定して
MySQLをビルドすることにより増やすことができます。
http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-buildopts.html

5.5.14でもconfig.h.cmakeを修正することにより上限を増やすことができました。
なお、5.5.14では121以上にするとクラッシュするようです。
#define MAX_INDEXES 100
http://bugs.mysql.com/bug.php?id=54127
http://bugs.mysql.com/bug.php?id=66560

このようにしてMySQLをビルドすることにより、MyISAMでは、64を超える
インデックスを扱うことができます。

しかしながら、mroongaストレージモードで64を超えるインデックスを
作成したテーブルにinsert等すると、mysqldがクラッシュします。

Q.mroongaでは1テーブルに64を超えるインデックスが扱えないのは
仕様でしょうか?仕様であれば、あきらめます。
なお、groongaには、カラムストアという大きなメリットがあるため、
カラムが増えてもパフォーマンスに影響がなく、
また、あまりに大きいテーブルのjoinは実用に耐え得ないため、
64個を超えるインデックスが扱えると非常にうれしいなぁと思っています。


CREATE TABLE IF NOT EXISTS `many_columns` (
  `1` varchar(20) NOT NULL,
  `2` varchar(20) NOT NULL,
  `3` varchar(20) NOT NULL,
  `4` varchar(20) NOT NULL,
  `5` varchar(20) NOT NULL,
  `6` varchar(20) NOT NULL,
  `7` varchar(20) NOT NULL,
  `8` varchar(20) NOT NULL,
  `9` varchar(20) NOT NULL,
  `10` varchar(20) NOT NULL,
  `11` varchar(20) NOT NULL,
  `12` varchar(20) NOT NULL,
  `13` varchar(20) NOT NULL,
  `14` varchar(20) NOT NULL,
  `15` varchar(20) NOT NULL,
  `16` varchar(20) NOT NULL,
  `17` varchar(20) NOT NULL,
  `18` varchar(20) NOT NULL,
  `19` varchar(20) NOT NULL,
  `20` varchar(20) NOT NULL,
  `21` varchar(20) NOT NULL,
  `22` varchar(20) NOT NULL,
  `23` varchar(20) NOT NULL,
  `24` varchar(20) NOT NULL,
  `25` varchar(20) NOT NULL,
  `26` varchar(20) NOT NULL,
  `27` varchar(20) NOT NULL,
  `28` varchar(20) NOT NULL,
  `29` varchar(20) NOT NULL,
  `30` varchar(20) NOT NULL,
  `31` varchar(20) NOT NULL,
  `32` varchar(20) NOT NULL,
  `33` varchar(20) NOT NULL,
  `34` varchar(20) NOT NULL,
  `35` varchar(20) NOT NULL,
  `36` varchar(20) NOT NULL,
  `37` varchar(20) NOT NULL,
  `38` varchar(20) NOT NULL,
  `39` varchar(20) NOT NULL,
  `40` varchar(20) NOT NULL,
  `41` varchar(20) NOT NULL,
  `42` varchar(20) NOT NULL,
  `43` varchar(20) NOT NULL,
  `44` varchar(20) NOT NULL,
  `45` varchar(20) NOT NULL,
  `46` varchar(20) NOT NULL,
  `47` varchar(20) NOT NULL,
  `48` varchar(20) NOT NULL,
  `49` varchar(20) NOT NULL,
  `50` varchar(20) NOT NULL,
  `51` varchar(20) NOT NULL,
  `52` varchar(20) NOT NULL,
  `53` varchar(20) NOT NULL,
  `54` varchar(20) NOT NULL,
  `55` varchar(20) NOT NULL,
  `56` varchar(20) NOT NULL,
  `57` varchar(20) NOT NULL,
  `58` varchar(20) NOT NULL,
  `59` varchar(20) NOT NULL,
  `60` varchar(20) NOT NULL,
  `61` varchar(20) NOT NULL,
  `62` varchar(20) NOT NULL,
  `63` varchar(20) NOT NULL,
  `64` varchar(20) NOT NULL,
  `65` varchar(20) NOT NULL,
  `66` varchar(20) NOT NULL,
  `67` varchar(20) NOT NULL,
  `68` varchar(20) NOT NULL,
  `69` varchar(20) NOT NULL,
  PRIMARY KEY (`1`),
KEY `2` (`2`),
KEY `3` (`3`),
KEY `4` (`4`),
KEY `5` (`5`),
KEY `6` (`6`),
KEY `7` (`7`),
KEY `8` (`8`),
KEY `9` (`9`),
KEY `10` (`10`),
KEY `11` (`11`),
KEY `12` (`12`),
KEY `13` (`13`),
KEY `14` (`14`),
KEY `15` (`15`),
KEY `16` (`16`),
KEY `17` (`17`),
KEY `18` (`18`),
KEY `19` (`19`),
KEY `20` (`20`),
KEY `21` (`21`),
KEY `22` (`22`),
KEY `23` (`23`),
KEY `24` (`24`),
KEY `25` (`25`),
KEY `26` (`26`),
KEY `27` (`27`),
KEY `28` (`28`),
KEY `29` (`29`),
KEY `30` (`30`),
KEY `31` (`31`),
KEY `32` (`32`),
KEY `33` (`33`),
KEY `34` (`34`),
KEY `35` (`35`),
KEY `36` (`36`),
KEY `37` (`37`),
KEY `38` (`38`),
KEY `39` (`39`),
KEY `40` (`40`),
KEY `41` (`41`),
KEY `42` (`42`),
KEY `43` (`43`),
KEY `44` (`44`),
KEY `45` (`45`),
KEY `46` (`46`),
KEY `47` (`47`),
KEY `48` (`48`),
KEY `49` (`49`),
KEY `50` (`50`),
KEY `51` (`51`),
KEY `52` (`52`),
KEY `53` (`53`),
KEY `54` (`54`),
KEY `55` (`55`),
KEY `56` (`56`),
KEY `57` (`57`),
KEY `58` (`58`),
KEY `59` (`59`),
KEY `60` (`60`),
KEY `61` (`61`),
KEY `62` (`62`),
KEY `63` (`63`),
KEY `64` (`64`),
KEY `65` (`65`),
KEY `66` (`66`),
KEY `67` (`67`),
KEY `68` (`68`),
KEY `69` (`69`)
) ENGINE=mroonga DEFAULT CHARSET=utf8;

insert into many_columns(`1`,`2`) values (1,2);


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



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