アプリ版:「スタンプのみでお礼する」機能のリリースについて

首記、InnoDBであれば1000、MyISAMであれば4096という仕様かと思いますが、CREATE TABLEを実行するとカラム数1500くらいから
#1117 Too many columns
のエラーが出てしまい、カラム数の多いテーブル追加ができない状況です。

こちら、事象や考えられる原因、対処方法などご存じの方がいれば教示いただけますか。

またVARCHARの64K制限があるため多くのカラムはTEXTにしています。

A 回答 (2件)

おそらくTEXT型のせいでカラム数が若干少なくなっているかと思います。


MySQLのサイズ計算は実際は複雑で詳細は下記をご覧頂き、確認されてはいかがでしょうか。
しかしデータ型を多少変更したことろで限度は2千数百といったところだと思います。
http://dev.mysql.com/doc/refman/5.5/en/column-co …

で、やはり現実的にはテーブルを垂直分割するしかないかなと思います。3000カラムでしたら1500カラムの2テーブル、あるいは1000カラムの3テーブルあたりに分けてパフォーマスを見られてはいかがでしょう。(もちろんデータを入れた際にレコード長をオーバーしないかどうかも含めて)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
CSVに出してもカラムが多すぎてExcel管理もできず、現テーブル構造でもあまりいいものではない上に、やはり1000カラムの3テーブルにせざるをえないかと考えていたので、アリかナシか、というところで無くはない、という同じような意見をいただけただけでも助かります。
また参考URLもありがとうございました。

お礼日時:2012/06/27 21:42

きちんと正規化して構造を整理すれば1000を超えるようなカラムに


なるなんて考えられませんが?

この回答への補足

回答ありがとうございます。
質問とは関係ないかと思いましたが補足として状況説明です。
1つのレコードに対して管理する似たようなデータが3000ほどあり、正規化して外に出すことで構造上はきれいになるのですが、表を作るのに3000回JOINをする、またデータのテーブルのレコード数が数千万になってしまいます。
当初管理するデータは100程度でしたので(id、no、data)のようなテーブルを作成してJOINしていましたが、以前1000程度に拡張したときにパフォーマンスの問題が生じ、1テーブルに格納する形(id、data1、data2、、、data1000)に変更しています。
今回、それを3000まで拡張する必要が出てきたところで首記問題が生じてきた、という具合です。

補足日時:2012/06/27 19:52
    • good
    • 0
この回答へのお礼

きれいにできれば理想ですが、今回は急ぎの対応のためひとまず垂直分割で対応しようと思います。ありがとうございました。

お礼日時:2012/06/27 21:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!