Veri özeti?=, Like ile arama =?utf-8?q?performans'ı

From: Timu EREN <selamtux(at)gmail(dot)com>
To: pgsql-tr-genel(at)postgresql(dot)org
Subject: Veri özeti?=, Like ile arama =?utf-8?q?performans'ı
Date: 2005-11-27 12:24:17
Message-ID: 200511271424.21115.selamtux@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

Merhaba...

Öncelikle SQL üzerinde çok fazla bir bilgi ve tecrübeye sahip olmadığımı
belirteyim.

Şu sıralar PHP/PostgreSQL kullanarak yazdığım internet ilan sitesi var.
ve sistemi en çok zorlayacak olan durumun arama olduğuna karar verdim çünkü
toplamda 9 ayrı kategoriye göre arama yapabilmeli ve bu 9 ayrı kategorinin
değişik kombinasyonları olabilmeli idi. Bir arkadaşım ile bu tür bir aramayı
en optimize şekilde nasıl yapalır diye konuştumuğumuzda şöyle bir çözüm
önerisi geldi.

Her kategorinin kendine ait uniq değerleri var bunları birbirinin peşi sıra
ekle, tek bir veri elde et ve elde ettiğin verinin içinde like ile arama yap.

Biraz daha açmak gerekir ise:

101001704604450206 diye bir veri özeti var bu veri özeti bana şunu söylüyor.
1 => resmi var,
01=> şehir id'si
0017=> ilçe id'si
046=> marka id'si
0445 => model id'si
02 => Tür id'si
06 => renk id'si

Böylece tek bir sorgu ile toplam 7 ayrı kategoride like ile arama
yapabiliyorum.

tablo yapım ise

create table search_test (
ilan_id bigint not null,
search_sum varchar(50) not null
);

create index search_test_index on search_test(search_sum);

Yukarıdaki veri özeti gibi toplam 2 milyon kaydım var (sadece test için
rastgele 2 milyon kayıt girdim ) ve bu iki milyon kayıt için aşağıdaki
sorguyu çalıştırdığımda ortalama sonuç süresi 2.10 sn. sürüyor.

select * from search_test where search_sum like '1__0017_______02__';

Elbette tam çalışma tamamlandığında yukarıdaki arama cümlesi 2 milyon kayıtta
arama yapmayacak. (Dışarıda kalan 2 kategoriye göre süzme işlemi yapıp daha
sonra bu sorgu çalıştırılacak. ancak diğer iki kategori yine 2 şer milyon
kayıt üzerinde çalışacak.)

Eğer tek bir kategori ile arama yapılırsa bu sefer 10 sn. üzerinde sonuç
dönüyor.

Özet olarak sadece düz iki milyon kayıt için yukardaki gibi bir yapıda daha
hızlı arama yapabilmek için nasıl bir yol izlemeliyim. Like yerine ~ ile
arama yaptığımda çok daha fazla zaman aldığını belirteyim.

--
Saygılar && İyi çalışmalar
Timu EREN (a.k.a selam)

Responses

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Tom Lane 2005-11-27 16:29:35 Re: Case Conversion Fix for MB Chars
Previous Message Volkan YAZICI 2005-11-27 12:12:14 Re: Case Conversion Fix for MB Chars