当执行下面的代码时,它会一直思考并最终导致fastreport崩溃,为什么?
SELECT TREQDEVMAT.COD_PRODUTO,
TPRODUTO.DES_PRODUTO,
TPRODUTO.COD_SUBFAMILIA,
TPRODUTOIDIOMA.DES_PRODUTO AS DES_PRODUTO_IDIOMA,
TREQDEVMAT.NUM_CHAVEOP,
(TREQDEVMAT.QTD_REQUISITADA / TORDEMPROD.QTD_PRODUZIR) AS QTD_POREQUIP,
TPRODUTO.FLG_ASSISTTEC,
TPRODUTO.VAL_ULTCUSTOMOV,
TPRODUTO.DAT_ULTCOMPRA
FROM TREQDEVMAT
LEFT JOIN TPRODUTO ON TPRODUTO.COD_PRODUTO = TREQDEVMAT.COD_PRODUTO
LEFT JOIN TORDEMPROD ON TORDEMPROD.NUM_CHAVE = TREQDEVMAT.NUM_CHAVEOP
LEFT JOIN TPRODUTOIDIOMA ON TPRODUTOIDIOMA.COD_PRODUTO = TREQDEVMAT.COD_PRODUTO
WHERE TREQDEVMAT.NUM_CHAVEOP IN (
SELECT tordemprod.NUM_CHAVE
FROM tmrp
LEFT JOIN tordemprod ON tordemprod.NUM_CHMRP = tmrp.NUM_CHAVE
WHERE TRIM(NUM_MRP) = '1354'
)
AND TPRODUTO.FLG_ASSISTTEC = 1
AND TPRODUTOIDIOMA.COD_IDIOMA = 1
AND TREQDEVMAT.COD_EMPRESA = 1
AND (TPRODUTO.COD_SUBFAMILIA NOT LIKE 'CE-UM' OR TPRODUTO.COD_SUBFAMILIA = 'CM-FP')
ORDER BY TREQDEVMAT.COD_PRODUTO ASC
您的子查询包含不能使用索引的条件。它使得用于该查询的嵌套循环极其无效。由于执行结果时间非常长。
您的查询还包含逻辑错误:子查询中的条件重复联接中的条件,这使情况变得更糟。
Fast Report 的崩溃与这一切无关,很可能是查询返回大量记录的结果。