2016-10-22 12 views
0

私はSQLの新人ですから、誰かにとっては簡単な質問かもしれません。今私は2つのテーブルがあり、AとBとしましょう。SQL:複数の条件を高速に検索する

Aには、「性別」、「年齢」、「学歴」、「勤務年数」、「居住状態」、「スキルレベル」、 、および "キャリア"。

Bには、「性別」、「年齢」、「学歴」、「勤務年数」、「居住状態」、「年収」の列があります。

は、今私はBからこれらの5つの条件で検索し、私はINNER JOINを使用しようとした列の表Aに「年収」を追加したい(最初の5は、Aと同じである)のような:

のSELECT A. *、B INNER FROM B.annual_income

がON(= A.gender B.gender)

AND(A.age = B.age)

AND(A.をJOIN academic_degree = B.academic_degree)

AND(A.years_of_working_experience = B.years_of_working_experience)

AND(A.state_of_residence = B.state_of_residence)。

コードは機能しましたが、時間がかかりました。問題を解決するためにはるかに速い勇気があるかどうか誰にも知られていますか?ありがとう!

答えて

0

クエリのパフォーマンス調整は難しい話題になる可能性があります。実際に解決策を見つけるには、質問に提供されている情報よりも多くの情報を検討する必要があります。

MS Accessを使用していることをあなたの質問のタグから集めていますので、ここで私の前提です...私はまた、データがローカル(すなわち、リモートテーブルにリンクされていない.MDBファイルに保存されている) 。

クエリのパフォーマンスに与える最も大きな影響は、クエリが物理データモデルと連携していることを確認することです。あなたが記述したテーブル構造は、正直な人生を困難にする可能性があります。

各テーブルにサロゲートキーのような追加の列がありますか?よりシンプルな結合を使用することができれば、パフォーマンスに役立ちます。よりシンプルな結合キーを持っているかどうかにかかわらず、結合キーが両方のテーブルで適切に索引付けされていることを確認することは、おそらくパフォーマンスに影響を及ぼす最大の単一ステップです。

別のアルゴリズムがあるかどうか尋ねる... SQLを書くとき、あなたは特定のアルゴリズムについて実際には考えていません - データベースがそれを処理しますが、質問の精神には、私はいいえと言います。参加はあなたがする必要があります。

これが複数回実行する必要がある場合は、物理データモデルを改善する価値があります。 (データを一度結合する必要があるのであれば、データを改良モデルに変換するのは一度結合を実行する限り長くかかるため、価値がないかもしれません)。

したがって、それぞれの組み合わせ(年齢、性別、年齢、州、州)の各テーブルに1回だけ表示される場合は、各組み合わせに一意の整数を割り当てる新しいテーブルを作成することができます。割り当てられた値を格納するために、各テーブルにインデックス付きの整数列を追加します。あなたが持っているものよりもうまくいくはずです。

+0

こんにちは、非常に参考に返事に感謝!私たちが8人の年齢、2人の男女、3つの年齢、6つの異なる年数、5つの州を持つ場合、6歳の人を割り当てることができますか? 2年生、1年生、5年生、5年生の状態を指標「62155」に変換しますか? –

+0

説明しているのは、多かれ少なかれ、自然キーと代理キーの間の両方の世界の中で最悪の傾向にある「スマートキー」の一種です。だから私はそれを提案しないだろう。属性の各組み合わせに整数を割り当てる場合は、順番に(そして2つのテーブルの間で一貫性があることを確認して)それを行うだけです。 –

+0

私はそれを逐次的にすることも考えましたが、問題は2つのテーブル間で整合性を取る方法です。そんなことをするためにいくつかの例を教えてください。 –

0

あなたの問題は解決したい課題に適していますが、パフォーマンスの問題が発生した場合は、テーブルのインデックスを追加する必要があります。この記事はそれについて学ぶのに適した場所です:Create and use an index to improve performance(Access 2007用に書かれていますが、それは後のバージョンにも適用されます)。

サイドノート:さまざまな列のテーブルを結合していて、2つのテーブルが格納されている部分が重複しているように見えます。これはデザインに問題がある可能性があります。

私はannual_incomeが実際に別のテーブルに属しているかどうかは、他のすべての情報と同じキーに依存しているように思えます。両方のテーブルは、1人の人に関するデータを保持しているように見えます - その人は別のテーブルのエンティティですか、もしそうなら、おそらくこれら2つのテーブルは外部キー関係を介して参照する必要がありますか?

「適切な」回答を得るために必要な設定に関する重要な情報が不足していることがあります。

0

データを2回保存しないでください。情報をマージして1つのテーブルを削除してください。あなたの質問については、5列すべての新しい列計算ハッシュを作成し、その列に参加させることで高速化できます。計算ハッシュ用

チェックこれを: https://superuser.com/questions/550592/is-there-an-excel-function-to-create-a-hash-value

+0

はい...実際に、私はこれらの2つのテーブルを作った人が誰なのか分かりません。私は次回にこのようなことをやるように頼まれたら、私はそれらをまとめるつもりです –

関連する問題