Lesson 11 � Performance

QUERIES KO
FAST BANAO.

Bina index ke 1 million rows mein se data nikalne mein 2 second lagta hai � index se 0.001 second. Index database ka search optimization hai, bilkul library ka index card jaisa. Production databases mein yeh mandatory hai.

? 18 min✓ Intermediate✓ Prerequisite: Normalization

WHY: Index kyun zaroori hai?

Socho ek library mein 10 lakh kitabein hain. Agar tumharo paas index card nahi hai toh har kitab ek ek karke dekhni padegi � full table scan. Lekin agar alphabetically sorted index hai toh seedha "M" section mein jaake "MySQL" dhundh sakte ho � index scan. Yahi SQL indexes karte hain: data dhundhne ka shortcuts banana.

INDEX

Query speed badhata hai. Database ko shortcut deta hai data dhundhne mein. Har frequently queried column pe index lagana chahiye.

UNIQUE INDEX

Duplicate values allow nahi karta. Email ya phone number jaise columns pe lagata hai � data integrity bhi maintain hoti hai aur search bhi fast hota hai.

COMPOSITE INDEX

Multiple columns pe ek saath index lagana. Jab aap WHERE clause mein 2 ya 3 columns use karo � jaise course aur marks � toh composite index sabse fast hai.

HOW: Index banana aur use karna

Index banana simple hai � CREATE INDEX statement se. Lekin dhyan rakho: index read operations (SELECT) ko fast karta hai, lekin write operations (INSERT, UPDATE, DELETE) ko thoda slow karta hai � kyunki index bhi update hota hai har change ke saath.

1. Basic INDEX banao

Students table ke name column pe index banao:

sql
-- Name column pe index banao
CREATE INDEX idx_name ON students(name);

-- Ab yeh query fast hogi
SELECT * FROM students WHERE name = 'Aman';

2. UNIQUE INDEX banao

Email column pe unique index � duplicate emails allowed nahi hongi:

sql
-- Email pe unique index
CREATE UNIQUE INDEX idx_email ON students(email);

-- Duplicate email daalne par error aayega
INSERT INTO students (id, name, email, course, marks)
VALUES (4, 'Neha', 'aman@test.com', 'SQL', 88.00);
-- ERROR: Duplicate entry for key 'idx_email'
Remember: UNIQUE INDEX sirf ek baar check nahi karta � har INSERT aur UPDATE par verify hota hai ki duplicate value toh nahi aa rahi. Data integrity + speed dono milte hain.

3. COMPOSITE INDEX banao

Course aur marks dono columns pe ek saath index:

sql
-- Composite index: course + marks
CREATE INDEX idx_course_marks ON students(course, marks);

-- Yeh query fast hogi
SELECT * FROM students WHERE course = 'Python' AND marks > 85;

-- Partial composite bhi kaam karega (sirf course wali query)
SELECT * FROM students WHERE course = 'SQL';
Pro tip: Composite index mein column ka order important hai. Jo column WHERE clause mein pehle aata hai, woh pehle hona chahiye index mein. idx(course, marks) � course wali query fast, lekin sirf marks wali query pe index kaam nahi karega.

4. Index drop karo

Agar index ki zaroorat nahi rahi:

sql
-- Index hatao
DROP INDEX idx_name ON students;

-- MySQL mein syntax
ALTER TABLE students DROP INDEX idx_name;

5. Check karo kaunse indexes hain

Table pe kaunse indexes lage hain:

sql
-- Saare indexes dikhao
SHOW INDEX FROM students;

-- PostgreSQL mein
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = 'students';

6. Query performance check karo � EXPLAIN

EXPLAIN se dekh sakte ho query index use kar rahi hai ya full table scan ho raha hai:

sql
-- Performance check karo
EXPLAIN SELECT * FROM students WHERE name = 'Aman';

-- Without index: type = ALL (Full table scan � slow)
-- With index: type = ref (Index scan � fast!)
-- Rows scanned: 1000000 vs 1
Mental model: EXPLAIN ka output padho � "ALL" matlab poori table scan ho rahi hai (slow), "ref" ya "range" matlab index use ho raha hai (fast). Hamesha apni slow queries ka EXPLAIN nikalo.

Performance comparison

Real numbers se samjho index ka power:

sql
-- Scenario: 1,00,000 rows in students table

-- WITHOUT INDEX
SELECT * FROM students WHERE name = 'Aman';
-- Time: ~2.0 seconds
-- Method: Full table scan (1,00,000 rows check kiye)

-- WITH INDEX ON name
SELECT * FROM students WHERE name = 'Aman';
-- Time: ~0.001 seconds
-- Method: Index scan (sirf 1 row check kiya)
-- Speed improvement: 2000x faster!

Index types ka quick reference

sql
-- 1. Single column index
CREATE INDEX idx_name ON students(name);

-- 2. Unique index
CREATE UNIQUE INDEX idx_email ON students(email);

-- 3. Composite index (multiple columns)
CREATE INDEX idx_course_marks ON students(course, marks);

-- 4. Drop index
DROP INDEX idx_name ON students;

-- 5. Check indexes
SHOW INDEX FROM students;

-- 6. Performance check
EXPLAIN SELECT * FROM students WHERE name = 'Aman';

Try it: Indexes banao aur performance check karo

Neeche ke editor mein indexes create karo aur EXPLAIN se dekho query kaise fast hoti hai. Pehle bina index ke query run karo, phir index banao aur phir se same query chalao.

SQL playgroundIndexes banao aur performance compare karo
Run Query dabayein

Quick check

Students table ke name column pe ek index banao. Index ka naam idx_name rakho.

CREATE INDEX se shuru karo, index ka naam likho, phir ON table name aur column name. Syntax: CREATE INDEX idx_name ON students(name)

Common beginner mistakes

Indexes clear hai?

Ab Views par chalo � virtual tables banao jo complex queries ko simple banayein.