请帮帮我。。我有一个如下的问题:这是一张表格:
- delivery_order
- 交货_订单_项目
- bst
- bst_item
我需要的是,我想根据KODE_BARANG和JUMLAH,显示delivery_order/项目表中不在bst/项目表中的商品
我有下面的查询,但如果数据已经很多,它仍然很慢(当比较KODE_BARANG时,慢的部分在行中(,我想问一下,我的朋友中是否有人经历过类似的案件,以及如何解决?提前谢谢你,我希望这里有人愿意回答。
SELECT
del.KODE_DO,
deli.KODE_BARANG,
deli.NAMA_BARANG,
deli.JUMLAH,
deli.SATUAN,
@DITERIMA := COALESCE ((
SELECT
SUM( JUMLAH )
FROM
bst_item
WHERE
KODE_PENERIMAAN = deli.KODE_DO
AND KODE_BARANG = deli.KODE_BARANG #this line that makes it slow
AND `STATUS` <> 0),0) AS DITERIMA,
COALESCE ( deli.JUMLAH, 0 ) - @DITERIMA AS SISA
FROM
delivery_order del
INNER JOIN delivery_order_item deli ON del.KODE_DO = deli.KODE_DO
WHERE
DATE(del.TANGGAL) >= :TGL1
AND DATE(del.TANGGAL) <= :TGL2
AND COALESCE ( deli.JUMLAH, 0 ) - COALESCE ((
SELECT
SUM( JUMLAH )
FROM
bst_item
WHERE
KODE_PENERIMAAN = deli.KODE_DO
AND KODE_BARANG = deli.KODE_BARANG #this line that makes it slow
AND `STATUS` <> 0),0) > 0
SELECT
del.KODE_DO,
deli.KODE_BARANG,
deli.NAMA_BARANG,
deli.JUMLAH,
deli.SATUAN,
@DITERIMA := COALESCE ((
SELECT
SUM( JUMLAH )
FROM
bst_item
WHERE
KODE_PENERIMAAN = deli.KODE_DO
AND KODE_BARANG = deli.KODE_BARANG #this line that makes it slow
AND `STATUS` <> 0),0) AS DITERIMA,
COALESCE ( deli.JUMLAH, 0 ) - @DITERIMA AS SISA
FROM
delivery_order del
INNER JOIN delivery_order_item deli ON del.KODE_DO = deli.KODE_DO
WHERE
DATE(del.TANGGAL) >= :TGL1
AND DATE(del.TANGGAL) <= :TGL2
AND COALESCE ( deli.JUMLAH, 0 ) - COALESCE ((
SELECT
SUM( JUMLAH )
FROM
bst_item
WHERE
KODE_PENERIMAAN = deli.KODE_DO
AND KODE_BARANG = deli.KODE_BARANG #this line that makes it slow
AND `STATUS` <> 0),0) > 0
INDEX(KODE_PENERIMAAN, KODE_BARANG, `STATUS`)
并且不要在函数调用中隐藏TANGGAL。(cf"sargable"(