So verwalten Sie langsame MySQL-Abfragen beim Vergleich zweier Tabellen in einer Master-Detail-Beziehung: Eine Schritt-für-Schritt-Anleitung
P粉724256860
P粉724256860 2023-09-13 16:56:06
0
1
401

Bitte hilf mir.. Ich habe eine Anfrage wie die folgende: Hier ist eine Tabelle:

  1. delivery_order
  2. delivery_order_item
  3. bst
  4. bst_item

Ich möchte Artikel anzeigen, die in der Tabelle „delivery_order/item“, aber nicht in der Tabelle „bst/item“ vorhanden sind, und zwar anhand von KODE_BARANG und JUMLAH.

Ich habe die folgende Abfrageanweisung, aber sie ist immer noch sehr langsam, wenn bereits viele Daten vorhanden sind (der langsame Teil ist der Vergleich der Zeilen von KODE_BARANG). Ich würde gerne fragen, ob einer meiner Freunde eine ähnliche Situation hat und wie ich sie lösen kann. Vielen Dank im Voraus, ich hoffe, hier ist jemand bereit zu antworten.

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 #这行使它变慢 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 #这行使它变慢 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 #这行使它变慢 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 #这行使它变慢 AND `STATUS` <> 0),0) > 0

P粉724256860
P粉724256860

Antworte allen (1)
P粉652523980
INDEX(KODE_PENERIMAAN, KODE_BARANG, `STATUS`)

而且不要在函数调用中隐藏TANGGAL。 (cf "sargable")

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!