2016-07-15 5 views
0

私はIBM DB2に1億以上のレコードを含むテーブルを持っています。データベースは13年前に作られ、分割されていません。この表を使用してデータを検索して結合を作成するには、膨大な時間がかかります。検索と結合を最適化するための適切な方法が必要です。 1.非クラスタ化インデックスの使用とインデックスによる検索。 2.パーティショニングテーブル 3.またはその他の効率的なアプローチ。テーブルまたはpratitionsの100万レコードのクラスタ化されていないインデックス

貴重な時間と労力をいただき、ありがとうございます。

答えて

0

"適切な"アプローチは、もちろん、主観的です。通常はトレードオフであり、ほとんどの人がトレードオフするのは、変更を実装するコスト、変更を維持するコスト、およびソリューションのパフォーマンスです。

メトリクスを収集し、目標に同意することをお勧めします。そうしないと、ビジネスが本当に必要とするポイントを超えて継続的に最適化が行われる危険性があります。典型的には、代表的なデータを持つ代表的なテスト環境を作成することを意味します。その後、今日のようにクエリを実行し、パフォーマンスを測定します。最後に、最小限の最適目標が何であるか(あなたが請求書を払っている者と)同意する。その目標に達すると - 停止!

これまでのところ最も安い解決策は、インデックスを作成することを意味するクエリを最適化することでした。クエリによっては、数時間かかる場合があり、継続的なメンテナンスは必要ありません。

次は、サーバーの構成を見て、メモリ割り当てとディスク戦略をチューニングして不思議にすることです。making sure the database statistics are up to date.これらのタスクでは、通常2〜3人で作業する必要があり、定期的なメンテナンスタスク。

それでも問題が解決しない場合は、ハードウェアの改善を検討してください。データベースサーバーがデータベース(13年)と同じくらい古い場合は、携帯電話のパフォーマンスがサーバーより優れている可能性があります。次のステップに進むよりも、ハードウェアを改善する方がはるかに安いです。

ハードウェアで問題が解決しない場合は、データの正規化を解除することを検討してください。たとえば、大きなテーブルを他の大きなテーブルに結合する多数のクエリを実行している場合は、そのクエリを実行するために必要なすべてのデータを含む正規化されていないテーブルを作成することを検討してください。これは、開発の観点から(非正規化されたデータを維持する方法、すべてのクエリが確実に機能するようにする方法を検討する必要がある)、メンテナンスの観点からも高価です。複雑さが増すと、バグ修正が難しくなります。

非正規化が機能しない場合は、パーティション化が最もコストの高いソリューションです。これはかなり劇的な解決策です。私が知る限り、フロントエンドアプリケーションをパーティショニングロジックに接着するための「すぐに使える」ソリューションはないからです。したがって、データベースとやり取りする必要があるコードのほとんどすべてが、パーティション化ロジックを理解する必要があり、ある場所のバグは、そのデータとやり取りする他のすべてのコンポーネントを破壊します。

+0

ありがとうございました。ありがとうございましたが、あなたの提案は私を大きく助けました。 –

関連する問題