[DB共通] 経年劣化によるクエリのパフォーマンス劣化を未然に防ぐ

0 件のコメント

[DB共通] 経年劣化によるクエリのパフォーマンス劣化を未然に防ぐ
目的

クエリのパフォーマンス劣化の罠にかからないためのプロローグ
※経年劣化:月日が経つことにより、性能や機能が劣化すること

1. 日々件数が増加するトランザクションテーブルで、パフォーマンスが落ちるようなクエリになっていないか?

日々件数が増加するようなテーブルに対するクエリは、テーブルのデータ件数によるパフォーマンス劣化が顕著にあらわれるので特に気をつける必要があります(ノд・。) 例えば、トランザクションテーブル全件取得としていると、日々取得件数が増えるので、だんだんクエリが遅くなってきます。トランザクションテーブルのデータが増えても、きちんと条件で絞ったりされる設計になっているか?を検討しましょう( • ̀ω•́ )✧
※全件取得できるような抜け道はないか?も検討しておくとBetter(。・ω・。)

2. インデックスが効いている項目を、検索項目として利用しているか?

特にテーブルのデータ件数が多い時、インデックス(索引)が効いている項目をWHERE句にしているかどうかで、パフォーマンスに影響が出ます。(本の索引があれば、本全体を読み返さなくても対象のページにたどり着ける可能性があるのと同じです)
クエリがインデックスをうまく使えていない場合は、対象列にインデックスを付与する等して、インデックスを有効活用できるようにしましょう(ただし、次の項目No.3に注意)

3. インデックスを追加する場合、その項目は頻繁に更新・削除は発生しないか?

インデックスを貼れば何でも検索が早くなるわけではありません。その項目が頻繁に更新、削除される場合は、インデックスを貼っても効果が目減りしていきます(本の索引はあるけど、ページが破れているため、結局すべてのページを探しに行くようなイメージ)
インデックスを付与する対象列の更新頻度等も気を配っていきましょう(。・д・。)

4. テーブルの件数が増加するトランザクション系の場合、データのローテートが実施されているか?

クエリを気にかけることも大切ですが、テーブルのローテートにも気を配りましょう。どんなにWHERE句の条件を厳しく設定しても、テーブルデータが500億件あったとすると、検索には時間がかかります(*´・д・)(・д・`*)

メモ(。・ω・。)φ...データベースへのアクセス回数が減らすことができるか検討しているか?

経年劣化とはまた違う話ですが、データベースへのアクセス回数を減らすことができるのであれば、ネットワーク負荷が軽減できるので良いです!プログラム側で何度もクエリを発行するのではなく、DB側でスクリプトを実行し、アクセスする回数を減らす等、色々試してみましょうv(。・ω・。)

0 件のコメント :

コメントを投稿