Socho ek giant book hai jisme ek billion pages hain. Har page padh ke "dragon" word dhundhna forever le lega. Toh peeche hum ek index rakhte hain: words ABC order mein page numbers ke saath. Ek B-tree wahi alphabetical index hai — sorted, isliye "cat" se "dog" tak ke saare words bhi aasani se grab ho sakte hain. Ek hash index ek magic coat-check ki tarah hai: tum exact ticket number do aur turant apni cheez milti hai, lekin tum "10 se 20 ke beech ke saare tickets" nahi maang sakte. Ek full-text index ek aisi list hai jo kehti hai "word dragon pages 4, 17, 88 par hai" — sentences ke andar words dhundhne ke liye perfect.
B-tree lookup ko O(logmN) disk reads kyun kaha jaata hai — kaunsi data-structure property iske liye zimmedaar hai?
Yeh balanced hai (saari leaves same depth par) aur har node = ek disk page with high branching factor m, toh h=⌈logmN⌉.
B+tree leaf nodes ek sorted list mein linked kyun hain?
Fast range scans / ORDER BY support karne ke liye — start dhundho, phir leaves sequentially walk karo.
Hash index ORDER BY aur range queries ke liye kyun fail hota hai?
Hashing keys ko order destroy karne ke liye scatter karta hai, isliye adjacent values unrelated buckets mein jaati hain; walk karne ke liye koi order nahi.
~1 billion rows ke liye branching factor 100 ke saath B-tree mein kitne levels honge?
~5, kyunki log100109=4.5.
Normal B-tree index LIKE '%word%' kyun serve nahi kar sakta?
Leading wildcard koi known prefix nahi deta jahan se descent start ho, isliye full scan hoti hai; full-text/inverted index use karo.
Inverted index kya hota hai?
Har word/token → us word wale documents (postings) ki list ka map, full-text search ke liye use hota hai.
Full-text index banane ke liye teen text preprocessing steps kaunse hain?
Tokenization, stemming, stop-word removal.
Composite B-tree indexes ka leftmost-prefix rule batao.
(a,b) par index a ya (a,b) queries help karta hai lekin sirf b nahi, kyunki pehle a se sort hota hai.
Index add karne ka main cost/trade-off kya hai?
Extra storage + slower writes (har insert/update/delete ko index maintain karna padta hai).
B-tree ke upar hash index kab sahi choice hai?
Jab queries sirf pure equality lookups hain, koi ranges/sorting nahi (jaise session_id cache).