[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Optymalizacja



> Mam maly problem z optymalizacją wyszukiwania danych.
> 
> W tabeli mamy pola:
> zakład pracy,
> nazwisko,
> imię,
> wydział
> 
> Użytkownik obsługuje jeden zakład ale kilka (od jednego do kilku)
> wydziałów
> 
> Jak ustawić indeksy aby miał szybki dostęp do pracowników z obsługiwanych
> przez siebie wydziałów w kolejności alfabetycznej.
> 
> Ustawienie indeksu na
> zakład,
> nazwisko,
> imię,
> wydział
> 
> oraz wykonywanie pętli
> FOR EACH prac WHERE zaklad = vZaklad
>                 AND CAN-DO('w1,w2,w10',uzyt.wydz)
> NO-LOCK:
> 
> END.
> 
> nie daje zadawalających wyników. Czy można coś z tym zrobić.

Cos mi sie wydaje, ze problem tkwi gdzie indziej. Moze brakuje USE-INDEX w FOR
EACH, albo jest, ale wskazuje na zly indeks?

Ilu moze byc pracownikow w jednym wydziale? 10 tysiecy? 20 tysiecy?
Sekwencyjne przejrzenie 20 tysiecy rekordow na byle PCcie trwa 4-5 sekund, a
przeciez zwykle nie potrzebujemy wszystkich rekordow na raz. Co to jest ten
niezadawalajacy wynik? Odpowiedz po 2 sekundach? 2 minutach?

Jesli pracownikow jednego zakladu jest 100 tysiecy, wydzialow 100, a zwykle
przeglada sie pracownikow 2-3 wydzialow to sugeruje uzycie temp table:

def temp-table tt_prac
 field nazwisko as char
 field imie as char
 field prac_recid as recid
 index nazwisko imie.
 
 
def var vListaWydzialow as char.
def var i as int.
def var vZaklad as char.


do i = 1 to num-entries( vListaWydzialow ):
  for each prac where prac.zaklad = vZaklad and
                      prac.wydzial = entry( i, vListaWydzialow
)                 no-lock:
    create tt_prac.
    assign
      tt_prac.nazwisko = prac.nazwisko
      tt_prac.imie     = prac.imie
      tt_prac.prac_recid    = recid( prac ).
  end.
end.

for each tt_prac:
  ......
end.

Oczywiscie w tabeli prac musi byc indeks rozpoczynajacy sie od zaklad,
wydzial.

Pozdrawiam!

Tomasz Judycki

Textus Virtualis Sp. z o.o.
Szaserów 3
04-293 Warszawa
tel/fax (48 22) 879 82 00
http://www.tv.com.pl

------
Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
Obsluga listy:  listserv@zeto.bydgoszcz.pl
Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
------