p0t: 1テーブル1インデックスオライリーの「実践ハイパフォーマンスMySQL」には
「MySQLでは、1つのクエリを実行する時、1つのテーブルにつき1つのインデックスしか使用できない」
と書いてあります。同じような内容を公式リファレンスマニュアルからは見つけられなかったんですが、実際に試して見る限りそのようです。他のRDBの感覚で言うと1テーブル1インデックスしか使われないのでは現実的な速度が出ない気がします。
この問題について。
何人かの人に聞いて回ったりしてるんですが、はっきりしたことはわかってません。
現状の俺の結論としてはこんな感じです。
- MySQLモデリングは実在する!(他のDBより非正規化を早い段階で行う)
- データモデリング手法の中には(この問題のせいで)MySQLでは機能しないものもある。
- MySQLでは非正規化でパフォーマンスを上げる。
眠たいことを言ってもしょうがないので断言気味です。
元々、通常のプログラミングとDBでは(インデックスのせいで)パフォーマンスの良い設計っていうのが感覚的に結構違う気がします。MySQLの非正規化は(DBAに対して)プログラマ側の考え方で、自分の慣れた理論にもってけるので特に文句が出てないんじゃないのかと思いました。
オンメモリのテーブルとか、レプリケーションとかレベル2のテーブル分割とか、それって、「1テーブル1インデックス問題」のせいでいろいろやらなきゃいけなくなってんじゃないの?とか怪しんでます。
関連エントリー: