MySQL 6.0では新たなJOIN最適化手法であるBKA - Batched Key
Accessの実装が進んでいる。BKAとは、読んで字のごとくキーを用いたアクセスをバッチ(ひとまとまりの)処理にすることである。現在のバージョンのMySQLでは、2つのテーブルをJOINする際、一つ目のテーブルから選択した行に対して、逐一2つめのテーブルから行が一つずつフェッチされる。例えば次のクエリを用いてテーブルt1とt2をJOINする際には以下のような流れで行われる。
mysql> SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b WHERE t1.c
> 1000 AND t1.c <= 2000;
t1からWHERE句の条件(1000 < c <= 2000)に適合する行をフェッチする。
条件に合う行が1000行あったとする。
1行目のt1.aと同じt2.bの値を持つ行をt2からフェッチする。
…
MySQL
5.1で追加されたメジャーな機能の影に隠れた、地味だが便利な改善がある。それがスロークエリログに関する仕様である。MySQL
5.0まではスロークエリログは1秒未満のクエリを捕捉することが出来なかった。が、MySQL
5.1では1マイクロ秒までのクエリを記録できるようになっている。従って、0.5秒かかるけど大量に実行されてパフォーマンスに大きな影響を与えている!というようなクエリの発見が出来るようになった。1秒未満のクエリを追跡したい場合、例えば以下のような設定をする。
[mysqld]
slow_query_log=ON
slow_query_log_file=mysql-slow.log
long_query_time=0.1
MySQL 5.0まではlog_slow_queryというオプションだったのが、MySQL …
2008年はMySQLにとっては激動の一年であり、実に様々なできごとがあった。その中でも特に大きなニュースといえば、
- Sun Microsystems IncによるMySQL AB買収。
- Drizzleプロジェクト立ち上げ
- MySQL Clusterの分離
- MySQL 5.1リリース
- MySQL User Conference Japan 2008開催
だろう。ちなみに、UCJ2008の資料はイベントのホームページからダウンロードできるので、是非入手して見て欲しい。
http://jp.sun.com/company/events/mysql/report.html
この中で、個人的にもっとも刺激的なニュースを挙げると、MySQL Clusterの分離だろう。
MySQL …
今日は仕事納めだったので、一年の締めくくりとしてMySQLにおけるソートの話でもしようと思う。
インデックスを利用しないクエリで最もよく見かけるもののひとつは、ORDER
BYを用いたソート処理だろう。もし、ソート処理においてインデックスを用いることが出来れば、MySQLは結果を抽出してから結果行をソートするのではなく、インデックス順に行を取り出せば良いので高速にソート処理することが可能になる。特に、LIMIT句やWHERE句を用いて行の絞り込みを行う場合は効果が絶大である。しかし、ひとたびインデックスを利用できない状況に直面すると、たちまちテーブルスキャンが発生して性能が劣化してしまう。
…
ここ数日「MySQL + Connector/J(JDBCドライバ) + プリペアードステートメント」の話題がちらほら出ています。正確に把握はしていないですがSQLインジェクション対策→PreparedStatementという流れできた話のようです。
[さらに読む]
知り合いのSさんが、演算子でこういうのみたことあるといっていたのが、
<=>
なんだろうな、と思っていたら、MySQLで提供されているNULLセーフな比較演算子でした。
mysql> select 1 = null;
+----------+
| 1 = null |
+----------+
| NULL |
+----------+
1 row in set (0.00 sec)
mysql> select 1 <=> null;
+------------+
| 1 <=> null |
+------------+
| 0 |
+------------+
1 row in set (0.05 sec)
mysql> select null = null;
+-------------+
| null = null |
+-------------+
| NULL |
+-------------+
1 row in set (0.00 sec)
mysql> select null <=> null;
…
来年4月にカリフォルニアで開催される MySQL Conference & Expo 2009 で、開発・公開しているストレージエンジン Q4M について話をする機会をいただくことができました。しかも 45 分間! 光栄です。
「MySQL のカンファレンス」なので、運用や実装面について、相当突っ込んだ話ができそう (というかツッコミが怖い...)。自分にとってもいい成長のチャンスだと思うので、しっかり準備していきたいと思います。
Using Q4M - a Message Queue Storage Engine for MySQL
Q4M is a message queue that works as a pluggable storage engine of MySQL 5.1.
Originally developed for Pathtraq (one of Japan’s largest web access stats service), the performance and stability of Q4M is …
[さらに読む]
こんにちは。
まだ、まだとパートナー様やエンドユーザ様に聞かれ続け、ご要望を頂き続け、はや数ヶ月。。。
お待たせしました。最新のパッチでは、
Identity ManagerはMySQLをリポジトリDBとして本番環境でもサポートします。
Oracle,DB2,SQLServerに加えて本番環境で採用頂けるDBの選択肢が広がりました。
これで、検証や開発で使っていたMySQL上の設定やデータをそのまま本番でもお使いいただくことができます。
_kimimasa
こんにちは。
まだ、まだとパートナー様やエンドユーザ様に聞かれ続け、ご要望を頂き続け、はや数ヶ月。。。
お待たせしました。最新のパッチでは、
Identity ManagerはMySQLをリポジトリDBとして本番環境でもサポートします。
Oracle,DB2,SQLServerに加えて本番環境で採用頂けるDBの選択肢が広がりました。
これで、検証や開発で使っていたMySQL上の設定やデータをそのまま本番でもお使いいただくことができます。
_kimimasa
こんにちは。
まだ、まだとパートナー様やエンドユーザ様に聞かれ続け、ご要望を頂き続け、はや数ヶ月。。。
お待たせしました。最新のパッチでは、
Identity ManagerはMySQLをリポジトリDBとして本番環境でもサポートします。
Oracle,DB2,SQLServerに加えて本番環境で採用頂けるDBの選択肢が広がりました。
これで、検証や開発で使っていたMySQL上の設定やデータをそのまま本番でもお使いいただくことができます。
_kimimasa