engineers_blogこんにちは。エンジニアの中山です。最近、ふるさと納税を初体験しました。手間がかかりそうという先入観を持っていたのですが、実際にはネットで申し込めて、決済はクレジットカードで、美味しい特産品がすぐに届きました。こんなに簡単なら、もっと早くから知っていればよかったのにと、知識の大切さを再認識しました。マネトク!にはそんなお得な情報がたくさんあります。してくると、やはり遅いクエリが気になってきます。対策として、インデックスの工夫、クエリのチューニング、キャッシュ設定、高速なハードウェアへの置き換え等の施策を行うことで、改善をすることができます。成長が進むと、それらの手段だけでは足りず、次の手が欲しくなってきます。高速化する手段の1つとして、パーティショニングが手軽で効果的なので試してみました。パーティショニングとは条件によってレコードを振り分け、1つのテーブルを分割する機能です。データファイルは複数に分かれるのですが、データベースのユーザーから見ると1つのテーブルのままなので、SELECT/UPDATE/INSERT/DELETEのクエリは変えず、そのまま使うことができます。計測用データの準備パーティショニングの効果を試すために、次のような計測用データを用意しました。samples;空のテーブルを作り、1行INSERTし、レコード数を倍増させるINSERTを23回実行することにより、約1677万レコードに増加させたあと、内容をUPDATEしています。それをパーティション数の違う各テーブルにコピーしました。sec)パーティション数が多く、細かく分割するほどほど速くなりました。パーティション無しでも、foo_idのインデックスが効いているので、アクセスするレコード数は変わらないように思えますが、実際は速くなりました。参照の局所性が高まって、ストレージへのアクセス等が効率的になることが要因なのではと考えています。sec)あまり差が無い結果になりました。パーティショニングの効果を発揮させるには、アクセス対象が特定のパーティションのみで済むようにすることが大事です。最後にマネーフォワードでは、急成長するプロダクトを基盤から支えるエンジニアを募集しています。