Selectivity — filter yoki indeks kaliti jadvaldagi satrlarning qanchalik kichik qismini tanlashini ifodalovchi ko‘rsatkichdir. Yuqori selectivity odatda kam satrga mos keladi va indeks scan uchun qulay. Atama ayrim manbalarda buning teskarisi sifatida ishlatilishi mumkin, shu sabab formula yoki cardinality bilan birga ko‘rsatiladi.
Hisoblash
Predicate selectivitysi taxminan mos satrlar / jami satrlar ulushi bilan ifodalanadi. id = 42 million satrli jadvalda bitta yozuv tanlasa ulush juda kichik. is_active = true satrlarning 95 foiziga mos kelsa ulush katta va oddiy indeksning foydasi kam bo‘lishi mumkin.
Column cardinality noyob qiymatlar sonidir. Noyob email yuqori cardinalityga ega. Boolean faqat ikki qiymatli. Cardinality va selectivity bog‘liq, lekin data taqsimoti notekis bo‘lsa faqat distinct count yetarli emas.
Optimizer statistikasi
Query optimizer table row count, null fraction, most-common values va histogramlardan predicate natijasini taxmin qiladi. Shu taxmin index scan, sequential scan, join tartibi va aggregation strategiyasini tanlashga ta’sir qiladi.
Statistika eski bo‘lsa plan noto‘g‘ri bo‘lishi mumkin. Bulk load yoki katta delete’dan keyin analyze yangilanadi. Sample asosidagi histogram kam uchraydigan qiymatni ko‘rmasligi mumkin; statistics targetni oshirish planning metadata va analyze vaqtini ko‘paytiradi.
Data skew
Bir columnning ayrim qiymati juda ko‘p, boshqalari kam uchrashi skew hisoblanadi. country='UZ' jadvalning 70 foiziga, country='IS' 0,1 foiziga mos bo‘lishi mumkin. Bitta o‘rtacha selectivity ikkala query uchun to‘g‘ri plan bermaydi.
Most-common-values ro‘yxati mashhur qiymatlarni alohida taxmin qiladi. Prepared statement generic plan ishlatsa parametr qiymatiga qarab turli plan tanlay olmaydi. Parameter-sensitive planning yoki queryni qayta planlash ayrim workloadlarda zarur.
Correlation
Ustunlar mustaqil deb taxmin qilinsa city va country filterlari selectivitysi ko‘paytiriladi. Aslida Toshkent deyarli O‘zbekiston bilan bog‘langan. Mustaqillik taxmini juda kam satr deb baholashi mumkin.
Extended statistics functional dependency, ndistinct va multivariate most-common valuesni saqlaydi. Composite indeks ham correlated shartlarga xizmat qiladi, ammo optimizer uning xarajatini to‘g‘ri baholashi kerak.
Indeks tanlovi
Juda kam satr tanlansa index traversal va random heap fetch sequential scan’dan arzon. Ko‘p satr qaytsa table’ni ketma-ket o‘qish tezroq bo‘lishi mumkin. Covering index heap fetchni kamaytirgani uchun ko‘proq satrda ham foydali qoladi.
Clustering factor indeks tartibi bilan table fizik joylashuvi qanchalik mosligini bildiradi. Mos bo‘lsa ketma-ket keylar yaqin page’larda va random I/O kam. Update hamda insertlar vaqt o‘tishi bilan correlationni o‘zgartirishi mumkin.
Query dizayni
Function bilan o‘ralgan column oddiy indeksdan foydalanmasligi mumkin. lower(email) uchun expression index yoki normalized column kerak. Implicit type cast ham indeks operator classiga nomos kelishi mumkin.
Selectivity bitta indeks yaratish qarorining yagona omili emas. Query chastotasi, latency talabi, write overhead, table hajmi va cache holati hisobga olinadi. EXPLAIN ANALYZE estimated va actual row farqini ko‘rsatib, statistika muammosini aniqlaydi.
Join selectivity
Join natijasi ikki table row sonigina emas, kalitlarning taqsimoti va constraintlarga bog‘liq. Foreign keydan primary keyga join har child satrga ko‘pi bilan bitta parent mosligini bildiradi. Unique metadata optimizerga cardinalityni aniqroq baholash imkonini beradi. Constraint mavjud, lekin NOT VALID yoki optimizerga ishonchli bo‘lmasa bu bilim ishlatilmasligi mumkin. Ko‘p-to-ko‘p join’da mashhur keylar natijani keskin kattalashtiradi.
Bog‘liq tushunchalar
Cardinality, Query optimizer, Histogram, Composite index, Index scan, Data skew, Extended statistics