検索,更新でエンジンを使い分ける
| ||
|
以下,MySQLを使用する上での注意点について述べる。まず,インストールにあたっては,Red Hat系のLinuxでは,MySQLをソースコードからコンパイルするのではなく,MySQL ABが提供しているバイナリ・パッケージを使用することをお薦めする。Red Hat系のLinuxのライブラリでは,バグがあるバージョンが使用されていることが多いためだ。
また,性能を優先する場合,WindowsよりはLinuxなどUNIX系OSを使用することが望ましい。
処理性能に関しては,一般的なRDBMのチューニング手法に加え,MySQL特有の注意点として,複数のデータ・ストア・エンジンを使い分けることで性能や信頼性を向上させることができるという点がある。
前述したように,MySQLではテーブルごとに異なるデータ・ストア・エンジンを使用できる。MySQLから使用できるエンジンにはいくつかあるが,現時点で主に使うことになるのはMyISAM,InnoDB,HEAPの3種類になるだろう(表3[拡大表示])。
MyISAMは標準のエンジンであり,速度を重視した設計思想のもとで開発され,読み込み専用の圧縮や,フルテキスト・インデックスといった機能を備えている。ただし,トランザクションは使用できない。また,ロックの単位はテーブルとなる。
トランザクションを使用したい場合はInnoDBを使用することになる。行レベルのロックが使用できる。ただし,トランザクションをサポートするためのオーバーヘッドがあり,MyISAMに比べて重い。
更新が発生するテーブルはInnoDBを使用し,検索が中心となるテーブルはMyISAMを使用する,といった形で用途に応じて使い分けることで,全体の性能を向上させることができる。
さらに,検索のみの用途や,一時テーブルとして使用するのであれば,HEAPと呼ぶエンジンを使用することができる。HEAPは,MyISAMをベースとしているが,テーブルをメモリー上に作成する。そのためMyISAMに比べてもさらに高速だ。ただし,サーバーに障害が発生してMySQLが停止するとデータが全て失われる。データに損傷を受けてもかまわないような用途で使用すべきである。また,HEAPでは可変長のフィールド,BLOB(Binary Large Object),TEXT型は使用できない。
データ・ストア・エンジンの指定は,CREATE TABLE文またはALTER TABLE文で行う。具体的には以下のようなSQL文になる。
CREATE TABLE(key int. value char(10) primary index key)TYPE=HEAP;
ALTER TABLE table_name TYPE=InnoDB;
また,他のDBMS同様,キャッシュ・メモリーなどを適切に設定し,ヒット率を向上させることも有効な手段である。MySQLでは,設定ファイルmy.cnfによりキャッシュ・サイズなどを設定する。主要なパラメータとしてはインデックスを保持するバッファのサイズである「key_buffer_size」や,同時にオープンできるテーブルの最大数である「table_cache」,データをソートするためのバッファのサイズ「sort_buffer」,最大同時接続クライアント数「max_connections」などがある(図3[拡大表示])。キャッシュのヒット率は「SHOW STATUS」コマンドで調べることができる。
また,MySQLがどのようにインデックスを使用しテーブルを検索したかというアクセス・プランは,他のRDBMSと同じようにEXPLAINコマンドで調べることができる。
詳しくはMySQLのマニュアル*12などを参照されたい。
ユーザ会のサイトなどに多くの情報
MySQLの情報源は,インターネット上にふんだんにある。例えばGoogleの検索結果を見てみると,2003年5月18日時点で,MySQLというキーワードを含むページは約824万件ある。Oracleを含むページ約882万件とほぼ同等である。またMySQL.comにリンクしているページは約3万2800件で,Oracle.comにリンクしているページ1万5300件の2倍以上になっている。
日本語の情報も多数ある。日本MySQLユーザ会では,マニュアルの日本語を進めていおり,同会のホームページ*13で成果を公開している。メーリング・リストでは様々な質問や議論が行われており,日本MySQLユーザ会のホームページで投稿内容を検索することができる。
日本MySQLユーザ会には,2003年5月29日現在で1162名が参加している。MySQLに興味がある方であれば誰でも入会できる。
立岡佐到士(たつおか・さとし)氏株式会社ソフトエイジェンシー 代表取締役 |