Konuyu görüntüle
IUCODERS FORUM > Programlama > Veritabanları > SQL Tablo Ayırma
Yazar
kellad


avatar
istanbul
Kayıt: 21.01.2006
26.02.2009-17:41 #57489
Eğer içinde milyonlarca kayıt olan tablolarınız varsa sorgularınızın süresi iyice artacaktır. Özel durumlarda böyle bir tabloyu belirli bir kritere göre ayırmak sorgu sürenizi kısaltacaktır. Bunun için aşağıdaki gibi bir sorgu işinizi görecektir.

Benim uygulamamda Türkiye'deki tüm yol parçalarının isimlerinin olduğu 1.5 milyon kayıtlı bir tablo var. Bu tablo içinden belirli bir mahalle içine giren yolları sorguluyorum. Bu tablomu ilçe ilçe ayırdım ve sorgu sürem epeyce azaldı.

DECLARE @ilceAdi nvarchar(255)
DECLARE @il nvarchar(255)
DECLARE @ilce nvarchar(255)
DECLARE tabloCursor cursor
For 
	Select IL + '_' + ILCE, IL, ILCE From Yollar_tr Group By IL,ILCE Order By IL,ILCE ASC 
Open tabloCursor
Fetch Next From tabloCursor Into @ilceAdi,@il,@ilce
WHILE (@@FETCH_STATUS <> -1)
BEGIN
	IF (@@FETCH_STATUS <> -2)
	BEGIN   
		EXEC ('DROP TABLE [' + @ilceAdi + ']')
        EXEC ('SELECT * into [' + @ilceAdi + '] FROM Yollar_tr where IL=''' + @il + ''' AND ILCE=''' + @ilce + '''')
		PRINT ' '
	END
	Fetch Next From tabloCursor Into @ilceAdi,@il,@ilce
END
CLOSE tabloCursor
DEALLOCATE tabloCursor


Sorgularken de:
"Select Adi From " + ddliller.SelectedItem.Text + "_" + ddlilceler.SelectedItem.Text + 
" Where MAHALLE LIKE '" + ddlmahalleler.SelectedItem.Text + "' GROUP BY Adi ORDER BY Adi ASC"

Şeklinde sorguluyoruz.





Decompiling the code of universe.
Listening the cosmic background radiation.
Swimming in Inter Stellar Medium.
Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
26.02.2009-20:15 #57493
çok amatör bir yöntem böyle birşey yapmamalısın yapılmasını da önermemelisin!
Veriyi çok zaruri durumlar olmadığı sürece farklı yerlerde tutmamalısın. Veriyi bölmek istiyor isen PARTITION oluşturmalısın. Bu şekilde veriyi mantıksal olarak aynı yerde tutarken fiziki olarak farklı yerde tutmuş olursun.

http://www.google.com.tr/search?q=s...-US:unofficial&client=firefox-a





N/A
Yazar
kellad


avatar
istanbul
Kayıt: 21.01.2006
27.02.2009-09:40 #57504
Partition olayını da biliyordum ama yapmak istediğim iş için bu daha iyi gibi geldi bana. Partition olayını da deniycem. Umarım daha iyi performans verir.





Decompiling the code of universe.
Listening the cosmic background radiation.
Swimming in Inter Stellar Medium.
Yazar
neurorebel


avatar

Kayıt: 15.08.2007
28.02.2009-02:48 #57532
performans sorunu cursor kullanmandan kaynaklanıyor.





Do weird and difficult things.

Yazar
aliozkn


avatar
Manisa
Kayıt: 13.04.2006
28.02.2009-11:08 #57534
neurorebel yazdi
 
performans sorunu cursor kullanmandan kaynaklanıyor.


Örnekte arkadaş cursoru sadece tabloyu ayırmak için kullanmış. Bir kereliğine yani onda sorun yok.

@nörüyon :D
Naparsın ya iş güç işte geçen muratla gelcektim de çok yorgundum. bi ara uğrayacağım size, içeriz :D
Bu ara dikey geçiş sınavı soru bankası kitabı bitti mi :D:D








Yazar
neurorebel


avatar

Kayıt: 15.08.2007
28.02.2009-14:14 #57535
Ha pardon :) O zaman indexler yaratmayı dene tabloda sanırım bu yararlı oluyordu. Partition biraz abartılı bir çözüm olabilir.


@aliozkn:

Nerelerdesin yaw :)





Do weird and difficult things.

Yazar
kellad


avatar
istanbul
Kayıt: 21.01.2006
02.03.2009-10:22 #57577
Diyelim ki her yolun adını, id'sini, mahallesinin id'sini kaydettin. Mahallelere ilçeleri ilçelere illeri bağladın. İsimlerini vererek belirli bir ilin belirli bir ilçesinin belirli bir mahallesindeki sokakların listesini tek sorguyla istediğin zaman partition da yapsan yine de sonuç dönmesi uzun zaman alıyor. İndexleme ve etkin sorgulamalar yapan stored procedure'ler kullanmak işi epey hızlandırıyor.
Anladığım kadarıyla partition olayı çok büyük tablolarla sık sık oynama yapıyorsan SQL'in yükünü hafifletiyor. Diski daha etkin kullanmanı sağlıyor.
Aynı türde verileri farklı tablolara bölmek veri tabanı mantığına aykırı ve biraz hile gibi oluyor biliyorum. SQL kullansam tabloları bölmezdim ama Access için en kolay yol bu gibi.





Decompiling the code of universe.
Listening the cosmic background radiation.
Swimming in Inter Stellar Medium.
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb