では、行きましょう。この乱雑なSELECT
クロス他のテーブルと、1 つの目的の行を取得するための順序があります。基本的に、私は の中で「計算」を行いORDER BY
ます。
1 ベーステーブル。
7JOINS
ローカルテーブルへのポイティング。
WHERE
2つの句とNOT IN
別のテーブルの交差があります。
ORDER BY
5 つの異なる計算の結果を合計した非常に大きな/醜いコードが表示されます。order by
最悪の行ケースを取得するには、これらの計算にその結果が必要です。
問題は、ストアド プロシージャを実行すると、実行に最大 8 秒かかることです。それはちょっと受け入れられない。だから、私はインデックスをチェックし始めています。
そこで、このクエリをより速く実行する方法についてのアドバイスを探しています。WHERE
句とフィールドにインデックスを付けてLINEA
いますが、他のものにインデックスを付ける必要がありますか? 行のように、私はJOINs
?または、クエリに別の方法でアプローチする必要がありますか?
クエリ:
SET @LINEA = (
SELECT TOP 1
BOA.LIN
FROM
BAND_BA BOA
LEFT JOIN
TEL PAR
ON REPLACE(BOA.Lin,'-','') = SUBSTRING(PAR.Te,2,10)
LEFT JOIN
TELP CLP
ON REPLACE(BOA.Lin,'-','') = SUBSTRING(CLP.Numtel,2,10)
LEFT JOIN
CA C
ON REPLACE(BOA.Lin,'-','') = C.An
LEFT JOIN
RE R
ON REPLACE(BOA.Lin,'-','') = R.Lin
LEFT JOIN
PRODUCTOS2 P2
ON BOA.PRODUCTO = P2.codigo
LEFT JOIN
EN
ON REPLACE(BOA.Lin,'-','') = EN.G
LEFT JOIN
TIP ID
ON TIPID = ID.ID
WHERE
BOA.EST = 'C' AND
ID.SE = 'boA' AND
BOA.LIN NOT IN (
SELECT
LIN
FROM
BAN
)
ORDER BY (EN.VALUE + ANT.VALUE + REIT.VAL + C.VALUE + TEL.VALUE
) DESC,