Firebird de sorgularda indexli alani secmek

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
mehmetantalya
Üye
Mesajlar: 189
Kayıt: 30 Eyl 2013 10:17

Firebird de sorgularda indexli alani secmek

Mesaj gönderen mehmetantalya »

Merhabalar,
Ürünler diye bir tablom var. urunid primary index. Ayrıca urunkodu,fisno alaninida indexledim.
Sorgu yaptigimda bu indexlerden sadece istedigim index i kullanmayi nasil yapabilirim? Suanda indexlerin hic birisini kullanmuyor. NATURAL seklinde görünüyor.
İşin ilginc tarafi ayni tablo ve ayni sorguda baska bir musterimin databasein de kontrol ettigimde bunda urunkodu index'ini secip ona göre sorgulama yapiyor.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Firebird de sorgularda indexli alani secmek

Mesaj gönderen Kuri_YJ »

Selamlar,

Bu işleme Forced Index veya Force Query Plan deniyor. Firebird'de PLAN olarak bulabilirsin.

Sebebini söyleyeyim. Şimdi RDBMS'lerde, eğer veriler yeteri kadar fazla değilse, Natural Order'ı kullanır. Yani Index sayfasını bul, belleğe yükle aramayı yap, kayda konumlan yerine kayıtları yükle ve tara daha az maliyetli bir işlem olacağından bunu tercih ederler.

INDEX SELECTIVITY diye bir şey vardır. Arada sırada bunu kendiniz manuel olarak Database'lerde refresh edebilirsiniz. Hatta buna ilişkin kodlar var, benim kullandığım bir Procedure'u gönderiyorum. Bu Tüm Indexleri bulup, Indexlerin Selectivitysini günceller.

Kod: Tümünü seç

SET TERM ^^ ;
CREATE PROCEDURE SP_RECALC_INDEX_SEL
AS
DECLARE VARIABLE INDEX_NAME VARCHAR(31); 
BEGIN 
  FOR SELECT RDB$INDEX_NAME FROM RDB$INDICES 
  INTO :INDEX_NAME 
  DO
  BEGIN 
    EXECUTE STATEMENT 'SET STATISTICS INDEX ' || :INDEX_NAME || ';' ;
  END 
END ^^
SET TERM ; ^^
Benim yaptığım denemelerde, bazen Naturel Order tercihi daha iyi sonuçlar verdi. Tabi bu kullandığınız tablolardaki kayıt sayıları ile alakalı bir durum. Bunu gözardı etmemelisiniz ve genelde Firebird bu konuda gayet iyi. Hatta bir keresinde ben zorla bu planı kullan demiştim ama sonuç Naturel Order'a göre daha yavaş oldu. Daha sonra Sorguma göre Index yapılanmasını değiştirdim o zaman doğru indexi seçip sonucu yapıştırdı.

Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla