「MySQLチューニング虎の巻」連載一覧
-
2012/03/16
MySQL InnoDBストレージエンジンのチューニング(後編)
前回は、InnoDBのチューニングをするために知っておくべきInnoDBの特徴と基本的な構造についてごく簡単に紹介した。それらを踏まえた上で、今回はInnoDBをどのようにチューニングするかについて解説しよう。新しい用語も出てくるが、それらについては本稿において説明しているので安心して欲しい。まだ前回のエントリを読んでいないというひとは、まずそちらに目を通して頂きたい。
-
2012/03/09
MySQL InnoDBストレージエンジンのチューニング(前編)
本連載では、3回にわたってチューニングの要であるオプティマイザについて説明してきた。オプティマイザは論理的な表現であるクエリを物理的にどう処理するかということを決めるRDBMSの心臓部であると言える。しかしながら、人体が心臓だけで機能しないのと同じように、RDBMSもオプティマイザだけで成り立つわけではない。実際に手足となりデータを操作するのはストレージエンジンだ。今回は、MySQLの代表的な(実質的にはデファクトスタンダードの)ストレージエンジンであるInnoDBの基本的なチューニングについて...
-
2012/01/17
MySQLチューニング虎の巻/ソートに関連するトピックとクエリの書き換え
SQLチューニング最後の締めとして、今回はソートに関連するトピックとクエリの書き換えについて触れておこう。これまで、MySQLのJOINに関連した実装および最適化アルゴリズムについて解説してきたが、今回のエントリではそれ以外のアルゴリズムでよく使われるものについて解説する。今回も例によってMySQLの公式サンプルであるworldデータベースを使って解説を行う。worldデータベースについての詳細は次の記事を参照にして頂きたい。>> MySQLにおけるデータベース作成/テーブル作成/サンプルデータ...
-
2011/11/30
Block Nested Loop Join/Batched Key Access Join
前回はNested Loop Join(以下NLJ)の原理とオプティマイザの挙動を大まかに説明した。NLJは非常に高速なJOINアルゴリズムなので普段はNLJだけでも困らないのだが、内部表へのアクセスにインデックスを使えない場合には必ずしも最適なアルゴリズムであるとは言えない。この問題に対して、MySQLはNLJの改良版である、Block Nested Loop Joinを実装しているので、本稿ではまずこのアルゴリズムについて紹介する。次に、内部表へのアクセスにインデックスを用いている場合でもさ...
-
2011/10/18
MySQLにおけるJOINのチューニングの定石
つい最近、最新の開発版であるMySQL 5.6.3 m6がリリースされたが、このバージョンにはBatched Key Access JOIN(以下BKA JOIN)という新しいJOINのアルゴリズムが組み込まれている。その他にもMySQL 5.6ではいくつかオプティマイザの改良が行われているので、条件に合致すれば同じクエリを実行した場合でも、以前のバージョンより効率的な実行計画になるだろう。データベースエンジニアにとって、クエリのチューニングは必須スキルであるが、BKA JOINについて理解する...