ビックデータが騒がれ始めてだいぶ立ちますが、データ量増加に伴うDBのクエリパフォーマンスも大きな壁となっています。今回は、クエリのパフォーマンス劣化を低減するためのポイントをご紹介します。
DB経年劣化を防ぐコツ・ポイント
1. 日々件数が増えるテーブルは注視する
日々件数が増加するトランザクションテーブルで、パフォーマンスが落ちるようなクエリになっていないか?
日々件数が増加するようなテーブルに対するクエリは、テーブルのデータ件数によるパフォーマンス劣化が顕著にあらわれるので特に気をつける必要があります(ノд・。) 例えば、トランザクションテーブル全件取得としていると、日々取得件数が増えるので、だんだんクエリが遅くなってきます。トランザクションテーブルのデータが増えても、きちんと条件で絞ったりされる設計になっているか?を検討しましょう( • ̀ω•́ )✧
※全件取得できるような抜け道はないか?も検討しておくとBetter(。・ω・。)
2. 検索項目はインデックスを参照しているか
インデックスが効いている項目を、検索項目として利用しているか?
特にテーブルのデータ件数が多い時、インデックス(索引)が効いている項目をWHERE句にしているかどうかで、パフォーマンスに影響が出ます。(本の索引があれば、本全体を読み返さなくても対象のページにたどり着ける可能性があるのと同じです)
クエリがインデックスをうまく使えていない場合は、対象列にインデックスを付与する等して、インデックスを有効活用できるようにしましょう(ただし、次の項目No.3に注意)
3. インデックス項目の更新・削除は頻繁ではないか
インデックスを追加する場合、その項目は頻繁に更新・削除は発生しないか?
インデックスを貼れば何でも検索が早くなるわけではありません。その項目が頻繁に更新、削除される場合は、インデックスを貼っても効果が目減りしていきます(本の索引はあるけど、ページが破れているため、結局すべてのページを探しに行くようなイメージ)
インデックスを付与する対象列の更新頻度等も気を配っていきましょう(。・д・。)
4. テーブルデータのローテートは検討したか
テーブルの件数が増加するトランザクション系の場合、データのローテートが実施されているか?
クエリを気にかけることも大切ですが、テーブルのローテートにも気を配りましょう。どんなにWHERE句の条件を厳しく設定しても、テーブルデータが500億件あったとすると、検索には時間がかかります(*´・д・)(・д・`*)
DB関連記事
DBのその他記事もまとめてますので、是非お立ち寄りください(。・ω・。)
この記事へのコメントはありません。