1

私は、トラフィックとデータベース設計の複雑さの両方で徐々に拡大しているWebサイトを持っています。私は常に開発者として何よりもまず働いてきましたが、コードを実行するために必要なことを超えて、DB管理者になることは決してありませんでした。これは変更する必要があります-私は物事のデータベース側で効率を改善する必要があります。

漠然とした例を挙げると、私は学習に取り掛かる方法を探しています。

  • パフォーマンス/スケーリングのための複雑なテーブル/関係の最適化
  • 効率的にインデックスを作成する方法。(現時点では、外部キーにインデックスをスローします。それだけです)
  • 複雑なデータベースの一般的な設計原則

私が見つけたリソースのほとんどは、SQLの基本(「これはSELECTクエリ、JOINなど」)に向けられているか、主にDB外の​​パフォーマンスの問題に焦点を当てています。

ですから、これは少し曖昧ですが、データベースが可能な限り最も効率的で統合的な方法で設計されていることを確認するには、どこを見ればよいでしょうか。

4

3 に答える 3

2
  1. データモデリングについて学びます。適切なデータ構造を選択することは、プログラミング全般、特にデータベースにとって、常に重要な最初のステップです。悪いデータ構造の上にパフォーマンスを「ボルト」することはできません!ERwinメソッドガイドは、おそらくデータモデリングについて学び始めるための悪い方法ではありません。
  2. DBMSが物理レベルでデータを編成する方法を学びます。これは、パフォーマンスのためにデータを「形成」する方法と、最新のDBMSが自由に使用できるパフォーマンスメカニズムの多くを効果的に活用する方法を理解するのに非常に役立ちます。インデックスを使用してください、ルーク!このトピックに関する優れたチュートリアルです。
  3. データベースに効率的にアクセスする方法を学び、コードから呼び出されるクライアントAPIを本当に理解していることを確認してください。さまざまなAPIには独自の特異性がありますが、それらはすべて、パラメーターバインディング、クエリの準備、フェッチなど、いくつかの共通のテーマを共有しています。たとえば、パラメータを手動でバインドする必要がないようにORMによって「保護」されている場合でも、これは「内部」で行われているため、パフォーマンスの高いコードを記述できるようになります。
  4. 測定、測定、測定。現代の情報システムは非常に複雑であり、専門家でさえ誤った仮定をしていることに気付くので、仮定に頼らないでください!
于 2012-04-11T17:41:03.703 に答える
1

何よりもまず、EXPLAINの使用方法とその出力の意味を学ぶことをお勧めします。最も一般的なクエリで実行し、出力を調べます。クエリは適切なインデックスを使用していますか?彼らはインデックスを使用していますか?一見非常に単純に見えるクエリは、かなりコストがかかる可能性があります。

次に、最も遅いクエリを見つけることをお勧めします。たとえば、Postgresには、実行にN秒以上かかるすべてのクエリのSQLソースをログに記録できる機能があります。インデックスが作成されていない、非常に複雑である、または大量のデータを操作しているため、速度が低下していますか?

第三に、特定のクエリが実行された回数を調べます。データベースを使用して静的データを保存し、テーブルを何度もヒットして、変更されないレコードを取得していますか?結果をどこかにキャッシュできる可能性があります。

于 2012-04-11T14:38:29.737 に答える