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