Filloni me planin e pyetjes, pastaj rregulloni shpenzimin më të lartë. Përdorni / për të parë se çfarë bëhet në të vërtetë në bazën e të dhënave, shtoni e duhur, eliminoni pyetjet dhe zgjidhni vetëm të dhënat që ju duhen.
Filloni me planin e pyetjes, pastaj rregulloni shpenzimin më të lartë. Përdorni / për të parë se çfarë bëhet në të vërtetë në bazën e të dhënave, shtoni e duhur, eliminoni pyetjet dhe zgjidhni vetëm të dhënat që ju duhen.
EXPLAINEXPLAIN ANALYZEEXPLAIN ANALYZE tregon planin e ekzekutimit dhe kohëzimet reale. Seq Scan mbi një tabelë të madhe është shenja klasike e paralajmërimit:
EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 42;
-- Seq Scan on orders (cost=0.00..18500 rows=120)
-- Filter: (customer_id = 42)
-- rows removed by filter: 999880 ← scanned the whole table!
Një indeks e shndërron një skanim të plotë në një kërkesë të shpejtë:
CREATE INDEX idx_orders_customer ON orders (customer_id);
-- Now: Index Scan using idx_orders_customer (cost=0.42..8.5 rows=120)
-- 1,000,000-row scan → ~120-row lookup
Indeksat kanë një kosto në shkrime: çdo INSERT/UPDATE duhet të përditësojë edhe indeksin, prandaj indeksoni kolonat në të cilat filtruani/lidhni/renditni — jo çdo kolonë. Një indeks përbërës (customer_id, created_at) shërben për WHERE customer_id = ? ORDER BY created_at në një strukturë.
Problemi N+1 — një pyetje për një listë, pastaj një për çdo rresht — është një shkak i lartë i ngadalësimit. Zëvendësojeni me ngarkimin e zellshëm, një JOIN ose IN (...) të grumbulluar:
-- N+1: 1 + 100 queries
SELECT * FROM orders; -- then per order: SELECT * FROM users WHERE id = ?
-- Fixed: one JOIN, only needed columns
SELECT o.id, o.total, u.name
FROM orders o JOIN users u ON u.id = o.user_id;
Gjithashtu zgjidhni vetëm kolonat e nevojshme (shmangni SELECT *) dhe faqosni me LIMIT/keyset pagination në mënyrë që të mos ngarkoni kurrë miliona rreshta.
Baza e të dhënave është ngushta më e zakonshme. Leximi i planit ju tregon pse një pyetje është e ngadaltë në vend se të huas; indeksi i duhur, heqja e N+1 dhe prerja e grupit të rezultateve rregullisht shndërrojnë pyetje me kohëzgjatje sekondash në milisekonda — pa zgjeruar harduerit.