Tosaigh leis an phlean fiosraithe, ansin ceartaigh an costas is airde. Úsáid / chun a fháil amach cad a dhéanann an bunachar i ndáiríre, cuir na cearta leis, bain fiosruithe as an spéir, agus roghnaigh sonraí ar leith amháin.
Tosaigh leis an phlean fiosraithe, ansin ceartaigh an costas is airde. Úsáid / chun a fháil amach cad a dhéanann an bunachar i ndáiríre, cuir na cearta leis, bain fiosruithe as an spéir, agus roghnaigh sonraí ar leith amháin.
EXPLAINEXPLAIN ANALYZETaispeánann EXPLAIN ANALYZE an plean forghníomhaithe agus na timings fíor. Is é Seq Scan ar thábla mór an bhrathadóir deirg clasaiceach:
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!
Ionann innéacs agus cuardach geal a bheith ina dhá gheal ar scabhairt iomlán:
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
Tá costas ar scríbhinní ar innéacsanna: caithfidh gach INSERT/UPDATE an t-innéacs a nuashonrú, mar sin innéacsa na gcolún a bhíonn tú ag fiosrú/a bhíonn tú ag socrú/a bhíonn tú ag gearradh orthu — ní gach colún. Freastalaíonn innéacs cumaisc (customer_id, created_at) ar WHERE customer_id = ? ORDER BY created_at in aon struchtúr.
Is ceann de na príomhchúiseanna loitigeach an fadhb N+1 — fiosrú amháin ar liosta, ansin ceann in aghaidh an tsraithe. Cuir páirt dhagálach, JOIN, nó IN (...) bheartaithe ina ionad:
-- 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;
Do bharr sin, roghnaigh colúin riachtanach amháin (seachain SELECT *) agus **leathnaigh