Merhabalar,
Table Partitioning'de soyle bir sorun yasiyorum...
Tablo adlari ve sutunlar rahat anlasilmasi icin basitlestidim...
A tablosu YIL sutununa gore Partiotion'lanmis bir tablo olsun..
A ( //
0 Kayit
YIL int4,
F1 int4,
F2 int4,
F3 int4,
F4 int4
)
A_2004 ( ) inherits A // 1.2 M kayit
A_2005 ( ) inherits A // 1.8 M kayit
A_2006 ( ) inherits A // 1.5 M kayit
A'da YIL'a gore yazilmis Insert Rule'lari var ayrica A'nin alt
tablolarinda da YIL icin Check Constraint'ler mevcut.
Web tabanli bir uygulama A tablosunu transparent bir sekilde
gayet guzel kullaniyor.
Insert, update, delete, select.. hepsi sorunsuz...Ayrica veritabaninda
Constraint Exclusion acik ve isliyor..
Gelelim soruna..
Diyelimki A'nin alt tablolarinin her biri (F1,F2,F3) uclusune gore
indexli..
Ve diyelimki uygulama soyle bir query gonderdi:
Hatirlatma: Partitioning uygulamaya transparent..
Select * From A Where YIL = 2004 Order By F1,F2,F3
Bu query'nin execution planina baktigimda, postgresql'in, once A
tablosundaki kayitlari cektigini,
(aslinda A tablosunun kendisinden (A Only) 0 kayit geliyor) daha sonra
A_2005 ve A_2006'yi
constraint exclusion'a gore devre disi biraktigini (burda sorun yok),
ve sonra A_2004'deki
kayitlari A'dan cektigi kayitlara ekledigini (append) ,
sonuclari siralama asamasina gelince de
(F1,F2,F3) indexini kullanamadigini goruyorum. Index
kullanamamasi dogal cunku
A'dan ve A_2004'ten gelen kayitlar materialize olduktan sonra
sort'a giriyor...
Halbuki ayni query'i direkt A_2004 uzerinde calistirdigimda, (F1,F2,F3)
index'i gayet guzel kullaniliyor..
Ama uygulama bunu yapamaz cunku o zaman partitioning transparency'sini
ihlal etmis olur.
Sorum su:
Bir sekilde Query Planner'a A'da (A Only) kayit olmadigini, dolayisiyla
A ve A_2006'yi materialize etmeye
gerek kalmadan direkt A_2006'ya bakmasi gerektigini soyleyerek,
A_2006'da sorting icin acilmis
(F1,F2,F3) indexini kullandirtmak mumkun mu?
Not: Ben yapamadim cunku A'da tanimladigim Check Constraint'ler diger
tablolari da ekliyor..
Ya bu sorunun baska bir cozumu olabilir mi?
Ilgilenen herkese simdiden tesekkurler,
Soner Demiray