குறிப்பு திட்டத்துடன் தொடங்கவும், பின்னர் மிகப்பெரிய செலவை சரிசெய்யவும். தரவுத்தளம் உண்மையில் என்ன செய்கிறது என்பதைக் காண / ஐ பயன்படுத்தவும், சரியான சேர்க்கவும், குறிப்புகளை நீக்கவும் மற்றும் உங்களுக்குத் தேவையான தரவு மட்டுமே தேர்ந்தெடுக்கவும்.
குறிப்பு திட்டத்துடன் தொடங்கவும், பின்னர் மிகப்பெரிய செலவை சரிசெய்யவும். தரவுத்தளம் உண்மையில் என்ன செய்கிறது என்பதைக் காண / ஐ பயன்படுத்தவும், சரியான சேர்க்கவும், குறிப்புகளை நீக்கவும் மற்றும் உங்களுக்குத் தேவையான தரவு மட்டுமே தேர்ந்தெடுக்கவும்.
EXPLAINEXPLAIN ANALYZEEXPLAIN ANALYZE செயல்பாட்டு திட்டத்தையும் உண்மையான நேரத்தையும் காட்டுகிறது. பெரிய அட்டவணையின் மீது Seq Scan செய்வது சிவப்பு கொடி:
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!
এটি ஒரு முழு ஸ্கேனை வேகமான தேடலாக மாற்றுகிறது:
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
குறியீடுகளுக்கு எழுத்துக்களில் செலவு உள்ளது: ஒவ்வொரு INSERT/UPDATE யும் குறியீட்டையும் புதுப்பிக்க வேண்டும், எனவே நீங்கள் வடிகட்டும்/சேர்க்கும்/வரிசைப்படுத்தும் நெடுவarre வரிசைக்கு குறியீட்டை அமைக்கவும் — ஒவ்வொரு நெடுவarre வரிசையும் அல்ல. ஒரு கூட்டு குறியீட்டு (customer_id, created_at) ஒரு கட்டமைப்பில் WHERE customer_id = ? ORDER BY created_at சேவை செய்கிறது.
N+1 சிக்கல் — ஒரு பட்டியலுக்கு ஒரு குறிப்பு, பின்னர் ஒவ்வொரு வரிக்கு ஒன்று — மெதுவின் முக்கிய காரணம். எআர்க் ஏற்றுதல், JOIN, அல்லது குழுவாக IN (...) மாற்றவும்:
-- 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;
மேலும் தேவையான நெடுவarre வரிசைகளை மட்டுமே தேர்ந்தெடுக்கவும் (SELECT * ஐ தவிர்க்கவும்) மற்றும் பக்க பகிர்க்கவும் LIMIT/keyset pagination கொண்டு நீங்கள் ஒருபோதும் பல மில்லியன் வரிசைகளை ஏற்றவில்லை.
தரவுத்தளம் மிக பொதுவான பாட்டல் கழிவறை. திட்டத்தைப் படிப்பது ஒரு குறிப்பு ஏன் மெதுவாக உள்ளது என்பதைக் கூறுகிறது கதை குறிப்பிற்குப் பதிலாக; சரியான குறியீட்டு, N+1 நீக்கம், மற்றும் பொறி செட் வெட்டு பொதுவாக விநாடி-நீண்ட குறிப்புகளை மிலிசெகண்ட்களாக மாற்றுகிறது — வன்பொருளை அளவிடாமல்.