テーブルの分割。
「どの馬が何のレースで何着だったか」というデータを
持っているテーブルがあります。
ちょろっとみたら、50万件のデータが入ってました。
パフォーマンスも落ちてきたので、そろそろ
テーブルを分割してみようと思います。
MySQLではMERGEテーブルというのがありますので、
これを使ってみます。
元のテーブルは「結果」というテーブル。
これを
「結果1996」〜「結果2006」
という具合に、年単位で分けます。
create table 結果1996 select * from 結果 where 日付 like '1996%';
create table 結果1997 select * from 結果 where 日付 like '1997%';
…
create table 結果2006 select * from 結果 where 日付 like '2006%';
という具合に。
そして、古いテーブルは削除。
drop table 結果;
MERGEテーブルを作ります。
create table 結果 (各列の定義)
type=MERGE UNION=(結果1996,結果1997,…結果2006)
INSERT_METHOD=LAST;
これで一応完了です。
パフォーマンスを測定してみます。
…と思ったのですが。
エラーが出ちゃって、select できませんね。
Got error 124 from storage engine
これじゃわからんって。
あれこれ調べていますが、
Bug #6853とか
Bug #8053あたりが怪しそう。
英語が読めずに困っています(失)
わかり次第、ここにも書きます。
-----
意外とあっさりわかった。
MERGEテーブルのcreate table分から
primary key、indexに関する記述を抜いたら、selectできた。
そのあと、create indexを使って、INDEXを作る分には問題なし。
そのあと、alter table でprimary keyを追加したあとだと、同じエラーが出てselect できない。
要するに、MERGEテーブルに対して、データが一意になるような設定(primary key とか unique index)をすると
Got error 124 from storage engineが返ってくる。
MySQLのマニュアルには、これしか書いていない。
--------
MERGE テーブルでは、テーブル全体で UNIQUE 制約を保持できない。
(中略)
このような方法で MERGE をテーブルを使用していると、高い確率で未知の問題が発生する。
--------
なので、今までprimary keyにしていた部分については、
indexに変更して代用するしかない?
何言ってるかわかんない?わかんないねぇ。
持っているテーブルがあります。
ちょろっとみたら、50万件のデータが入ってました。
パフォーマンスも落ちてきたので、そろそろ
テーブルを分割してみようと思います。
MySQLではMERGEテーブルというのがありますので、
これを使ってみます。
元のテーブルは「結果」というテーブル。
これを
「結果1996」〜「結果2006」
という具合に、年単位で分けます。
create table 結果1996 select * from 結果 where 日付 like '1996%';
create table 結果1997 select * from 結果 where 日付 like '1997%';
…
create table 結果2006 select * from 結果 where 日付 like '2006%';
という具合に。
そして、古いテーブルは削除。
drop table 結果;
MERGEテーブルを作ります。
create table 結果 (各列の定義)
type=MERGE UNION=(結果1996,結果1997,…結果2006)
INSERT_METHOD=LAST;
これで一応完了です。
パフォーマンスを測定してみます。
…と思ったのですが。
エラーが出ちゃって、select できませんね。
Got error 124 from storage engine
これじゃわからんって。
あれこれ調べていますが、
Bug #6853とか
Bug #8053あたりが怪しそう。
英語が読めずに困っています(失)
わかり次第、ここにも書きます。
-----
意外とあっさりわかった。
MERGEテーブルのcreate table分から
primary key、indexに関する記述を抜いたら、selectできた。
そのあと、create indexを使って、INDEXを作る分には問題なし。
そのあと、alter table でprimary keyを追加したあとだと、同じエラーが出てselect できない。
要するに、MERGEテーブルに対して、データが一意になるような設定(primary key とか unique index)をすると
Got error 124 from storage engineが返ってくる。
MySQLのマニュアルには、これしか書いていない。
--------
MERGE テーブルでは、テーブル全体で UNIQUE 制約を保持できない。
(中略)
このような方法で MERGE をテーブルを使用していると、高い確率で未知の問題が発生する。
--------
なので、今までprimary keyにしていた部分については、
indexに変更して代用するしかない?
何言ってるかわかんない?わかんないねぇ。
このネタへのコメント:
コメントはありません。