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