page_adsence

2013年5月15日水曜日

MySQLの勉強法と構築法

最近MySQLに詳しい人と一緒に仕事をすることになり、結構色々と勉強になることを教えてもらったのでメモを残しておく。

プログラム全般に関して
プログラムのデザインパターンやソート関連のアルゴリズムは目を通しておく程度に勉強しておいた方がよい。
自分の中で概念のインデックスを作ることで、それを手がかりに実装方法を検索しプログラミングすることができる。

データベースソフトウェアに関して
データペースソフトに関してはOracleが最も優れているので、Oracleで実装されている機能を覚えておくとよい。(MySQLで実装されていなくとも、それに似たことをすることは出来る可能性がある。)

DB設計に関して
画面仕様書が出来る前にDB設計をすることはWeb系の案件ではほぼ皆無なので、画面からDB設計を行っていけるようにする。
設計の大まかな手順
1.画面上から保存しないといけない要素の洗い出し
2.正規化を行い、各テーブルに振り分ける

プログラミングに関して
プログラムを書く際には、DB側で出来る処理は全てDBに任せる。
DBでどうしても出来ないものに関してはWeb側で処理をする。
理由はユーザーの流入経路がWebからDBの順番であるから。
Web側にはユーザー数とイコールの関係で負荷が掛かるが、DBに関してはDBアクセスが必要なページ以外では負荷がかからないので、Web側の負担を軽くするために、なるべくDB側に寄せる方が懸命である。

データベースエンジンの選び方に関して
ログ系や認証系のものを保存するのであればMyISAMやKVSが向いている。
但し、1つのDBサーバにエンジンが異なるものを使用するのは現実的ではないため、大概のシステムでInnoDBが採用されている。
もし本当にDBを分ける必要があれば、エンジンごとに別のDBサーバを使用するのがよい。

MySQLのカラム数に関して
MySQLのカラム数が100を超えると格段にパフォーマンスが下がるので、その場合は正規化してやる必要がある。
そうすることで、インデックスの数も減るし、オプティマイザが迷うことが少なくなるので、高速化される。

とりあえず今日話した内容はざっくりこんな感じ。