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

Re: Optymalizacja



"Marek Zając" wrote:
> 
> Witam grupowiczów.
> 
> 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ć.
> 
> Pozdrowienia Marek Zając
> 
> -----------------------------------------------------------------------
> P.S. Kontaktuj się 24h za darmo! Kliknij! < http://kontakt.wp.pl/ >
> 

Nie wszystko rozumiem, ale sprobuje pogdybac...

Nie jestem pewien (trzeba by sprawdzic przez wygenerowanie
x-referencji), ale wydaje mi się, że użycie funkcji (w tym wypadku
can-do) skutecznie zniecheca progress'a do uzycia indeksu w ogole. To po
pierwsze. 

Nawet jesli indeks jest uzywany, to na pewno umieszczenie pola wydzial
na koncu indeksu nie jest dobrym pomyslem, bo w takiej postaci jest
bezuzyteczne. Trzymanie imienia i nazwiska tylko dla porzadku sortowania
czasem upraszcza sprawe, ale trudno powiedziec czy jest tak rowniez tu.
Nie wiadomo bowiem jaka jest struktura w sensie proporcji danych w bazie
(ilu jest pracowników, ile wydziałów, ilu statystycznie pracowników w
wydziale), a to ma duze znaczenie w kontekscie tego od ktorej strony do
tych danych nalezy sie dobrac (czy od strony wydzialu, czy tez od strony
zakladu. No i czy do sortowania wyniku zapytania potrzebne jest
indeksowanie imienia i nazwiska. 

Jesli jest stosunkowo duzo wydzialow w ktorych pracuja niewielkie grupy
pracownikow, to zdecydowanie zmienilbym strukture indeksu poprzez
umieszczenie wydzialu na poczatku. 

Z drugiej strony (i nie jestem pewien czy to nie jest klucz do sukcesu)
jesli jest tak, ze w polu wydzial wpisujemy liste wydzialow, to az sie
prosi o uzycie indeksu slownego. Wtedy powinno chodzic jak burza...

Przyklad:
Pracownik obsluguje wydzialy: "w1,w2,w3,w14,w67" (czy taka jest postać
pola wydział?)

Wtedy...

warunek = "w1 | w2 | w3 | w14 | w67".
FOR EACH pracownik NO-LOCK WHERE pracownik.wydzial CONTAINS warunek AND
pracownik.zaklad = vzaklad
BY pracownik.imie BY pracownik.nazwisko:

END.

...powinno polecieć migiem...

Tomek
------
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
------