質問: こんばんわ。 データベースのパフォーマンスについて、質問したいことがあります。 * データベースのパフォーマンスが悪い理由 * n + 1問題 * index問題 この3つ以外にあると思うので、もしあればなぜ、それを見直すべき必要があるのかの理由も書いてほしいです。 自分の理由です。 データベースのパフォーマンスが悪い理由 -------------------- コンピュータはメモリー上のデータの出し入れは早いが、HDDへのアクセスは遅い データベースはHDDへのアクセスを行っているので、基本的にパフォーマンスは遅くなる。 もし、メモリー上にデータベースを展開できるのなら、高速アクセスは可能になる →redis, memcached Mysqlもクエリをメモリー上にキャッシュをするが、全てできるわけではない n + 1問題 -------- ループで回す処理を毎回クエリを作成しているので遅くなる。 クエリを工夫するだけで一回で取得できる。 このことから、n + 1問題に限らず、余計なクエリを作成しているところを直すことが必要。 index問題 -------- HDDにアクセスする際に、indexがないとレコード全てから探すことになる。 indexを貼ってあれば、余計なレコードから探さなくて良くなる まとめ ---- * データベースのパフォーマンスが悪い理由 →コンピュータの性質の問題 * n + 1問題 →クエリの問題 * index問題 →DBアクセスの検索ロジックの問題 まとめると上記の中身だと思っています。 これ以外に注意点や、考えが間違っていることがあれば、教えていただきたいです。
回答: システム規模やテーブル数、レコード数など、 いろいろな要因があるので、 「パフォーマンスに悪影響も及ぼすのは、これ」という回答はありません。 質問で言われている`3つのポイント`で、 間違っていることはありませんが、問題を解決してもパフォーマンスが必ず向上するわけではありません。 例えば、 一番多いレコードが5万レコードを下回るようなテーブルしかない小規模のシステムであれば、 おそらくどれも問題になりません。 (少々の速度向上には繋がるかもしれませんが、有意義なものではないと判断されることのほうが多い)