Optimize database import queries with improved index selection

This commit is contained in:
2025-01-29 18:42:29 -05:00
parent fb5bf4a144
commit 0d377466aa
3 changed files with 187 additions and 4 deletions

View File

@@ -52,7 +52,7 @@ async function importOrders(prodConnection, localConnection) {
let processed = 0;
// Process in batches
const batchSize = 20000; // Increased from 1000 since order records are small
const batchSize = 10000; // Increased from 1000 since order records are small
let offset = 0;
while (offset < total) {

View File

@@ -32,7 +32,7 @@ async function importPurchaseOrders(prodConnection, localConnection) {
FROM (
SELECT DISTINCT pop.po_id, pop.pid
FROM po p
FORCE INDEX (idx_date_created)
USE INDEX (idx_date_created)
JOIN po_products pop ON p.po_id = pop.po_id
JOIN suppliers s ON p.supplier_id = s.supplierid
WHERE p.date_ordered >= DATE_SUB(CURRENT_DATE, INTERVAL 5 YEAR)
@@ -42,6 +42,7 @@ async function importPurchaseOrders(prodConnection, localConnection) {
UNION
SELECT DISTINCT r.receiving_id as po_id, rp.pid
FROM receivings_products rp
USE INDEX (received_date)
LEFT JOIN receivings r ON r.receiving_id = rp.receiving_id
WHERE rp.received_date >= DATE_SUB(CURRENT_DATE, INTERVAL 5 YEAR)
AND (rp.received_date > ?
@@ -64,6 +65,7 @@ async function importPurchaseOrders(prodConnection, localConnection) {
COALESCE(p.notes, '') as long_note
FROM (
SELECT po_id FROM po
USE INDEX (idx_date_created)
WHERE date_ordered >= DATE_SUB(CURRENT_DATE, INTERVAL 5 YEAR)
AND (date_ordered > ?
OR stamp > ?
@@ -71,7 +73,7 @@ async function importPurchaseOrders(prodConnection, localConnection) {
UNION
SELECT DISTINCT r.receiving_id as po_id
FROM receivings r
JOIN receivings_products rp ON r.receiving_id = rp.receiving_id
JOIN receivings_products rp USE INDEX (received_date) ON r.receiving_id = rp.receiving_id
WHERE rp.received_date >= DATE_SUB(CURRENT_DATE, INTERVAL 5 YEAR)
AND (rp.received_date > ?
OR rp.stamp > ?)
@@ -110,7 +112,7 @@ async function importPurchaseOrders(prodConnection, localConnection) {
pop.cost_each as cost_price,
pop.qty_each as ordered
FROM po_products pop
FORCE INDEX (PRIMARY)
USE INDEX (PRIMARY)
JOIN products pr ON pop.pid = pr.pid
WHERE pop.po_id IN (?)
`, [poIds]);
@@ -138,6 +140,7 @@ async function importPurchaseOrders(prodConnection, localConnection) {
ELSE 1 -- Different PO
END as is_alt_po
FROM receivings_products rp
USE INDEX (received_date)
LEFT JOIN receivings r ON r.receiving_id = rp.receiving_id
WHERE rp.pid IN (?)
AND rp.received_date >= DATE_SUB(CURRENT_DATE, INTERVAL 2 YEAR)