LOOP yazmadan tek satır bulmak
Bir tabloda belirli bir satırı bulmak için her seferinde LOOP yazmanıza gerek yok. TROIA'nın LOCATERECORD komutu, verilen parametrelere göre doğru satırı bulur ve tablonun aktif satır imlecini (active row) o satıra taşır. Satır bulunamazsa aktif satır değişmez ve SYS_STATUS 1 olarak set edilir — bu yüzden komuttan sonra SYS_STATUS kontrolü yapmak önemlidir.
SEQUENTIAL: sırayla tarama
En temel varyasyon, tabloyu Java katmanında sırayla tarar — LOOP komutunun CRITERIA COLUMNS varyasyonuna çok benzer:
OBJECT:
TABLE T1,
STRING STRINGVAR3;
SELECT USERNAME, CREATEDBY, CHANGEDBY
FROM IASUSERS
INTO T1;
LOCATERECORD SEQUENTIAL COLUMNS CREATEDBY VALUES 'ENES' ON T1;
STRINGVAR3 = T1_ACTIVEROW + '-' + T1_USERNAME + ' (' + SYS_STATUS + ')';
LOCATERECORD SEQUENTIAL COLUMNS CREATEDBY VALUES 'ENES' ON T1 NEXT;
STRINGVAR3 = STRINGVAR3 + TOCHAR(10) + T1_ACTIVEROW + '-' + T1_USERNAME;
NEXT varyasyonu bir önceki eşleşmeden sonraki satırı bulur — aynı kritere uyan birden fazla satırı tek tek gezmek için kullanılır.
BINARYSEARCH: sıralı tabloda hızlı arama
Tablo aranacak kolona göre zaten sıralıysa (artan), ikili arama çok daha hızlı çalışır:
SELECT USERNAME, CREATEDBY, CHANGEDBY
FROM IASUSERS
ORDER BY CREATEDBY
INTO T1;
LOCATERECORD BINARYSEARCH COLUMNS CREATEDBY VALUES 'ENES' ON T1;
Bu varyasyon yalnızca verilen kolonlara göre önceden sıralanmış tablolarda çalışır.
INDEXED: hash index ile arama
Aynı tabloda farklı değerlerle tekrar tekrar arama yapacaksanız, bir kez hash index kurup her aramada onu kullanmak taramadan çok daha hızlıdır:
BUILDHASHINDEX 'MyIndex' COLUMNS CREATEDBY ON T1;
LOCATERECORD INDEXED INDEX 'MyIndex' VALUES 'ENES' ON T1;
STRINGVAR3 = T1_ACTIVEROW + '-' + T1_USERNAME;
LOCATERECORD INDEXED INDEX 'MyIndex' VALUES 'ENES' ON T1 LAST;
Hangisini seçmeli?
Üç varyasyon da aynı işi yapar ama performans profilleri farklıdır: tek seferlik aramalarda SEQUENTIAL yeterlidir; tablo zaten sıralıysa BINARYSEARCH işinizi görür; aynı tabloda çok sayıda arama yapacaksanız BUILDHASHINDEX + INDEXED ile önceden bir index kurmak en performanslı seçenektir.
Sonuç
LOCATERECORD, TROIA'da "bul ve imleci oraya taşı" işleminin üç farklı hızda çözümünü sunuyor. Hangisini seçeceğiniz verinin sıralı olup olmadığına ve kaç kez arama yapacağınıza bağlı — doğru seçim, büyük tablolarda gözle görülür performans farkı yaratır.
Yorumlar (0)
Yorum Yaz