日々精進

新しく学んだことを書き留めていきます

実践ハイパフォーマンスMySQLまとめ1

実践ハイパフォーマンスMySQL

実践ハイパフォーマンスMySQL

注:この本は基本的にMySQL4.0について書かれているので注意。自分に5.0の知識があまりないので5.0ではどう違うかとかわかりません。


・設定ファイルの場所
/etc/my.cnf
データディレクトリ/my.cnf
~/.my.cnf
の三択。


・重要なコマンド
show variables 環境変数一覧を表示。
show processlist 実行中のプロセス一覧
show status 統計情報一覧
show table status テーブルの統計情報
processlist以外は全部likeが使える


・ロックの種類
共有ロック、排他ロック、読み出しロック、書き込みロック
テーブルロック、ページロック、行ロック
InnoDBエンジンのみMVCCが使える
MyISAMエンジンはテーブルロックのみなので高速だが並列性は低い


トランザクション
ACID - 原子性、整合性、独立性、永続性
MySQLはデフォルトAutoCommit(ええーこまるー('A`) )


・どんな基準でエンジンを選べばいいの?
読み出し、書き込みどちらか一方の比率が非常に高ければMyISAM。count句がめちゃ速い。Fulltext Indexが使える。
トランザクション、並行処理、外部キーが必要ならInnoDB


Heapテーブルは一部のデータ型が使えない。メモリ上にあるので再起動したりすると消える。


ベンチマーク
Benchmark Suite(マルチコアCPUでは正確に測定できない), super-smack, MyBench


・インデックス
メリット:読み出しが速くなる
デメリット:書き込みが遅くなる、使う容量が増える
MySQLは一回のクエリで一つのインデックスしか使わない。
複数のインデックスを同時に使いたい場合はマルチカラムインデックスを使用すべき。
MyISAMはプレフィックス圧縮、キーパックという機能でインデックスの容量を小さくできる。


・インデックスが使えない状況
後方一致(例:'%99')、部分一致(例:'%99%')で検索したい場合(FulltextIndexでもだめ。)
正規表現
テーブルの30%以上にクエリが一致する場合、MySQLはインデックスを使用しない