index

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

index

Mesaj gönderen serbek_tr »

S.A.
Arkadaşlar index ile ilgili yazıları okudum ama hepsini yorumlamaya kalkınca kafam karıştı açıkçası yazıların birinde şöyle deniyordu. Örneğin tablonda 3 alan olsun iki alanı index içinde kullanırsan ve sorgu çekerken index te kullanmadığın alanı order by yaparsan index çalışmaz ve tablo baştan sona taranır

Kod: Tümünü seç

SELECT A,B,C FROM X
WHERE A>1000
ORDER BY C
Burda A ve B alanları indexli ama c değil böyle bir sorguda indexler çalışmazmış doğrumu.

Birde index te kullanılacak alanların en başında mutlaka unique alanımızmı olmalı
örneğin posta kodlarını içeren bir tablo var

Kod: Tümünü seç

pkodu_id,pkodu,il_id,ilce_id
burda index sıralaması nasıl olmalı örnek sorgum şu şekilde

Kod: Tümünü seç

SELECT * FROM POSTA
WHERE IL_ID=72 (İLÇEYE GÖREDE ÇAĞIRABİLİRİM)
ORDER BY PKODU
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: index

Mesaj gönderen Lost Soul »

index olarak tanımlayacağınız alan belirlerken bazı kriterleri göz önünde bulundurmalısıınız.
örneğin stokicari,fatura gibi kayıtların kodu veriler arası bağlantılarda anahar olarak kullanılır, ya da veri dökümü içerisinde arama yaprken kodun yanı sıra isime göre arama da yapılmakta. dolayısı ile veritabanında bu tip kayıtlar en çok kullanılam kayyıtlardır.
ya da hareket tablolarında tarihe göre sıralam işlemi çok kullanılmakta.
işte bu tip durumlarda index devreye girer.

index olarak tanımladığınız alanlar ayrı bir liste halinde dökülür ve siz sıralama yapacağınız zaman eğer sıralamaları index olarak tanımlanmış alanlara göre yaparsanız, indexlerden oluşan bu dökümlere başvurularak diğer kayıt alanları ilk etapta gözardı edilir.

böylece tabloda sıralama yapılırken bütün kayıtların ookunması yerine sadece index alanları okunur ve bir kayıta tüm kayıt alanları(sql de aksi belirtilmedikçe) sadece kayıt çağrıldığı zaman veritabanından çekilir.

dolayısı ile index alanları dışında bir alanı sıralam ölçütü olarak belirtirseniz, o zaman index verileri değil index olmayan verilerden okunma yapılacağı için index alanların kullanım amacı o sılarama esnasıda devre dışı kalır. Ama bu işlem index'i tümüyle ve kalıcı olarak devre dışı bırakmaz.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: index

Mesaj gönderen aslangeri »

index i şöyle bir kitabın içindekiler kısmı olarak düşünebilirsin.
eğer kitabın içindekiler kısmında yazmayan bir başlığı arıyorsan tüm kitabı baştan sona tararsın.
eğer tabloda c için index tanımlanmamışsa tüm kayıtları baştan sona tarıyor.
aksi halde kaydın olup olmadığını veya doğru sırada olduğunu nerden bilecek.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Re: index

Mesaj gönderen serbek_tr »

aslangeri ilgine teşekkür ederim.
Ancak benim indexte kullanmadığım c alanını where şartında kullanmıyorum where şartında kullandıklarım indexli alanlar sadece indexli olmayan alanı sort etmek için kullanıyorum order by çektiğinin verinin sıralanmasını sağlıyor veri index olan alanlara göre çağrılıyor ancak forumda bir yerde order by da kullandığın alan indexli değilse index çalışmaz yazıyordu emin olmak için sormak istedim. Eğer iş bundan ibaret ise normal şartlarda bir dbgrid üzerindeki alanlara göre kullanıcıya sort imkanı verdiğimizi düşünecek olursa tablodaki tüm alanları indexlememiz gerekecek demektir.
teşekkür ederim
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: index

Mesaj gönderen Lost Soul »

tablonun tüm alanlarını indekslerseniz hiç bir anlamı kalmaz
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: index

Mesaj gönderen aslangeri »

s.a.
sanırım bir iletişim kazası oldu.
Order by da kullandığın alan indexli değilse index çalışmaz.
burda index çalışmaz derken hangi index order by da kullandığın alan göre olmayan index mi yoksa where kısmında belirttiğin alanların indeksi mi
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: index

Mesaj gönderen emin_as »

Sort işlemini yapman için index olup, olmaması önemli değildir. İndex varsa, veritabanı bu indexi kullanır ve işlem hızlı gerçekleşir. İndex yoksa veritabanı verilen alana göre kendi sıralar ve bu işlem yavaş olacaktır. Eğer sürekli sıralama gerekiyorsa, index yaratmak mantıklıdır.

Gerekirse veritabanın tüm alanları da indexlenebilir. Önemli olan gerekliliklerdir.

İndex yaratmanın sakıncaları da vardır, yeni kayıt eklenirken bu indexler güncellenir. O nedenle çok index varsa, yeni kayıt ekleme biraz daha yavaş olacaktır.

İndex aramalarda, sıralamalarda önemli hız avantajı saglar ve çok sayıda index veri eklemelerinde yavaşlığa neden olur.

Sonuç olarak denge önemlidir, en çok kullanılan durumlar göz önünde bulundurularak sistem tasarlanır. Nadiren yapılacak işlemler için index yapmak gereksizdir.
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Re: index

Mesaj gönderen serbek_tr »

S.A.
konuya emin_as arkadaşımda katıldı teşekkür ederim aslında belkide sormadığım ama aklımda kalan bir çok soruya arada cevap vermiş oluyorsunuz teşekkür ederim.

Aslangeri arkadaşım biraz geç kaldım belki ama yanıt vermekte. olabildiğince kaynaklara bakıp bilgi toplamaya çalışıyorum çünkü öyle bir projeye giriştimki kendi çapımda en büyük projem olacak aslında kullanıcı sayısı ve kayıt sayısı büyük bir proje olacak o yüzden sağlam veriler elde edip altyapıda sonradan değişikliğe mecbur kalmak istemiyorum. Çok fazla alan indeksleyip insert ve update lerde zaman kaybetmek istemiyorum ama kayıt sayısı fazla olacağından da indexleri en verimli şekilde kullanmak istiyorum. demem oki aslangeri arkadaşım where şartında kullanacağım alanları zaten indexliyorum ama where şartında hiç kullnamayacağım bir alanıda order by da kullanmam gerekecek order by da kullanacağım alanın index li olmaması bana hız kaybettirirmi bir örnek vermiştim dbgridde belkide sutun isimlerine tıklanarak sıralama yaptıracağım belkide bu durumda bu alanların çoğu indexli olmayacak ama herseferinde aynı where kriterine bağlı olarak sorgu yapacağım ama order by değişecek. şimdi anlatabilmişimdir umarım.

hazır konu açılmışken bir noktaya daha değinmek isterim. index oluştururken bir index içinde birden fazla field olacak field ların yukardan aşağı sırası en ayırt edici field a göremi olmalı yoksa en genel fielda göremi olmalı
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: index

Mesaj gönderen Battosai »

emin_as cevabı vermiş aslında tekrar niye soruyorsunuz ? Kısaca where şartındaki index alanlar index'e göre taranır...where şartındaki alanların index olması performansı direk etkiler....burada sıralama yapılacak alan where şartını sağlayan alanlar arasında olacağı için çok önemli değildir...mümkünse aramaları index alanlara göre yapın zaten tüm alanları kullanıp arama yapacağınız bir tablo yoktur tahminimce...Ayrıca sorguda kullanılan koşullarda önemli where a=1 or c=5 derseniz ve c index değil ise yine tüm tabloyu tarayacaktır...
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Re: index

Mesaj gönderen serbek_tr »

battosai ; birdaha neden soruyorsun demişsin ben emin_as arkadaşıma teşekkür ettim buda demek oluyorki okudum. amam Aslan geri arkdaşım ile arada bir kopukluk oldu ilgisiz ve alakasız kalmamak adına benim için zaman ayırmış birine bende zaman ayırıp sorunun cevabını almış bile olsam tekrar sorumu anlatırım
tekrar sormadım farkındaysan konuyu tekrar izah ettim.

Ayrıca sanada katıldığın için teşekkür ederim.

Ve arkadaşlar hepinize teşekkür ederim gerekli bilgileri katkılarınızla almış bulunuyorum sağolun.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Cevapla