MySQLのためになりそうな話

2021.05.06

CATEGORY : 雑記

1.EXPLAIN

既にご存じの方がほとんどだと思いますがSQL文の先頭に「EXPLAIN 」を足すことで、そのSQL文のパフォーマンスを見ることが出来ます。
実行結果として様々な情報が表示されますが、全てを説明すると長くなってしまうので見方については別途お調べ下さい。

2.charとvarcharの違い

MySQLにおいてはchar(20)、varchar(20)でも全角・半角に関わらず20文字まで格納出来ます。
括弧内の数字はバイト数ではなく文字数であるという事です。
ではcharとvarcharの違いは何か。
char=固定長文字列、varchar=可変長文字列 です。
例えばchar(20)のカラムに「abc」の文字列を入れた場合、末尾の17文字分がスペースで埋められます。
char型は郵便番号等、長さが決まっているカラムに使用し、そうでない場合はvarcharを使うと良いです。

3.縦持ちのテーブルを横並びで取得したい

下記のような構造のテーブルを

ユーザID項目名項目値
1氏名テラソル タロウ
1性別
1生年月日19910101
2氏名ウッテラ ハナコ
2性別
2生年月日19991231

↓このように横並びで取得したい場合

ユーザID氏名性別生年月日
1テラソル タロウ19910101
2ウッテラ ハナコ19991231

下記のSQLで取得可能です。

SELECT
ユーザID
,MAX(CASE 項目名 = ‘氏名’ THEN 項目値 ELSE NULL END) AS ‘氏名’
,MAX(CASE 項目名 = ‘性別’ THEN 項目値 ELSE NULL END) AS ‘性別’
,MAX(CASE 項目名 = ‘生年月日’ THEN 項目値 ELSE NULL END) AS ‘生年月日’
FROM
ユーザテーブル
GROUP BY
ユーザID;

やや長めのSQL文になってしまうので、システムで使う頻度が多い場合はビューとして登録しておくと良いかと思います。

どれか1つでも参考になれば幸いです。

Pocket