2017-10-12 18 views
0

クエリを最適化するために非常に慣れていないので、どんな助けでも大歓迎です。結合SQL Serverの最適化

私は現在、実行に+ 10分かかる3方向結合を持っています。私は現在、長いことが理想的ではないことを待たなければならないように、これをテストしようとしています。私はそれをより速くする方法はありますか?

現在のクエリ:

SELECT 
DISTINCT 
S.[No], 
S.[Date], 
S.[No], 
L.[No], 
C.[Name], 
C.[E-Mail], 
C.[Order] 
FROM [Customer] C 
JOIN [Line] L 
ON C.[No] = L.[No] 
JOIN [Sale] S 
ON S.[No] = L.[No] 
WHERE S.[Date] >= '2017-04-01' 
AND L.[Type] = '2' 
AND C.[Type] = '2' 

列のイム意識どれも持っていない限り、インデックス。どの列をインデックスに追加するのが最適でしょうか?

テーブルの行:

カスタマー80,000行

ライン:55万行

販売:130万行

私が最初に最初に小さなテーブルを結合するために、これを変更したが、それはdoesnの大きな違いをもたらしたようです。

おかげ

+3

「私の知る限り、どの列もインデックスを持っていません」。なぜですか? – Siyual

+0

@Siyualそれはちょうどその誰かによって設定されている方法です –

+0

それをよく修正してください。インデックスの欠如は非常に問題です。これらのテーブルに主キーがありますか? –

答えて

2

これはあなたのクエリです:

ここ
SELECT DISTINCT S.[No], S.[Date], S.[No], L.[No], 
     C.[Name], C.[E-Mail], C.[Order] 
FROM [Customer] C JOIN 
    [Line] L 
    ON C.[No] = L.[No] JOIN 
    [Sale] S 
    ON S.[No] = L.[No] 
WHERE S.[Date] >= '2017-04-01' AND L.[Type] = '1' AND C.[Type] = '1'; 

ある提案:あなたは本当にそれを必要としない限り、

  1. SELECT DISTINCTを削除します。それは不必要なオーバーヘッドを追加する。
  2. 1に変更すると、Typeが数値です。私はそれを推測するだろう。
  3. すべての結合キーに索引を追加します。
  4. ジョインを確認します。 。 。すべてのテーブルで同じ列が使用されていると、私は驚いています。
  5. WHERE句の列のインデックスが必要な場合があります。しかし、私は結合キーが実際のパフォーマンスの問題であると思われます。

通常、このサイズの3つのテーブルのクエリは10分かかることはないため、不正な結合キーが使用されている可能性があります。

+0

インデックスを追加すると問題が発生する可能性はありますか?データベースの残りの点では? –

+0

@RyanGadsdon 。 。インデックスはディスク上にもう少しスペースを占め、メモリを占有する可能性があります。また、挿入、更新、および削除を少し遅くします(通常はごくわずかです)。 –