山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

今日のMySQL

こないだデータ分析担当がMySQL

テーブルをInnoDBに変えたようです。

変える前は全部MyISAM文字コードだけ

テーブルによってeucjpmsとujisがある

状態でしたが、これで

InnoDB×eucjpmsとMyISAM×ujisの

テーブル郡になってよりややこしくなって

しまいました。


どうしてもJOINしたかったのですが

JOINすると重くて結果が出てきません。

いろいろ試したのですが、インデックスは

ちゃんと使っていてグループ化しなければ

わりと1分くらいで結果が出ます。

グループ化するとだめになります。


元のテーブルをいじることができなかった

ので、テーブルをコピーしてエンジンと

文字コードを合わせたらサクサクSQL

動くようになりました。

今もう一度検証してみたらエンジンと

文字コードはあんまり関係なくインデックスが

効いているかどうかだったようです。

インデックス使ってなくてもグループ化

しないときはなぜか結果が帰ってくるのが

oracleと違うところです。


そんなことでエンジンや文字コードをいろいろ

したのでわかったことをメモしておきます。


・テーブルのエンジン、文字コードの調べ方

私はMySQL Workbenchを使っています。

テーブルを右クリックしてcopy to clipboard

create statementで適当なエディタに貼り付け。

show create table テーブル名 でもいけました。


・create as selectでエンジンを指定

create table テーブル名 engine myisam as select~

テーブル名の後にengine xxx


文字コードはカラムごとに別にできる

複雑になるのでできてもしたくはありません。



・テーブルの文字コードの変換

ALTER TABLE 【テーブル名】 CONVERT TO CHARACTER SET 【文字コード】;

以下では変換できないので注意。

ALTER TABLE 【テーブル名】 CHARSET=【文字コード】;

これを紹介しているサイトがあって実際実行

できたのですが、変換はされませんでした。

MySQLのリファレンスにはこの構文はないようで

謎です。