好的,我们开始吧。SELECT
穿过其他表并订购以获得所需的行,这很混乱。基本上我在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,