SELECT _ yomon va undan qochish kerakligi haqida ko’p postlarni o’qidim, aksariyatlari esa aynan nima uchunligi haqida yozishmagan. Keling bugun millionlab yoki minglab row yoki columnlar bilan ishlash davomida aynan nega SELECT _ dan foydalanish yaxshimasligi haqida gaplashamiz.
1.Unnecessary I/O
Sizga doim ham barcha columnlarni tanlash kerakmas bo’lishi mumkin. Agar siz barcha columnlarni fetch qilib ularni ba’zilarini umumman ishlatmasangiz bu ham resursni uvol qilish xisoblanadi, chunki barcha page (bu haqida keyingi postlarda)lardagi ma’lumotlarni o’qishiyabsiz. BTW, SELECT * index-only scan qilishga to’siqlik qiladi.
2. Increase network traffic
Demak keraksiz columnlarni ham olib kelayabsizmi bu degani ko’p network bandwidth sarflash degani.
3. Application memory
Ma’lumotlar ko’paygandan keyin dasturingiz ham kerakmas ma’lumoltarni ushlab turish uchun ko’proq memory talab qilishni boshlaydi.
4. Client Deserialization
Ma’lumotlar clientga jo’natilishdan oldin protocol qoidalariga muvofiq serialization bo’ladi. Demak qancha ko’p ma’lumot jo’natsangiz shuncha ko’p serialization operatsiyalari bajariladi va bu ko’p CPU yeydi. Endi jo’natdi ham deylik, client serialized datani qabul qilgandan keyin nima bo’ladi albatta uni deserialize qilishi kerak va boya aytganimizdek CPU yana isrof bo’ladi.
Conclusion
Ushbu postda SELECT * yomon deyilmagan aksincha uni qachon va qayerda ishlatishni bilmaslik yomon deyilgan. Shunchaki qilib ko’rish va o’rganishlar davomida ishlatavering ammo production levelda buni har yeda qo’llash sizga qimmatga tushishi mumkin.
Telegram: otabekswe