Możesz przyspieszyć dostęp do danych tabeli, jeśli efektywnie używasz indeksów i buforowania. Ponadto możesz użyć technologii optymalizacji zapytań Rushmore, aby zoptymalizować swoje zapytania.
Aby przyspieszyć dostęp do danych w tabeli, użyj indeksu. Dodanie indeksu do tabeli przyspiesza wyszukiwanie danych, zwłaszcza gdy technologia Rushmore jest sprytnie stosowana do optymalizacji tego wyszukiwania. Ponadto indeksowanie umożliwia pracę z danymi posortowanymi we właściwej kolejności; Na przykład podczas przeglądania można sortować tabelę klientów według nazwiska.
Jeśli wpisy w tabeli zawierają unikalne klucze, utwórz indeks główny lub indeks kandydata dla pola klucza. Tego typu indeksy umożliwiają programowi Visual FoxPro sprawdzenie poprawności kluczy na niskim poziomie (bez programowania), co zapewnia największą wydajność.
Oprócz indeksowania pól używanych do wyszukiwania i sortowania należy indeksować pola zawarte w operacji łączenia tabel. Jeśli połączysz dwie tabele za pomocą pól nieindeksowanych, operacja taka może wymagać setek razy więcej czasu do wykonania.
Ważną cechą Visual FoxPro jest możliwość tworzenia indeksu na dowolnym wyrażeniu. (W niektórych systemach zarządzania bazami danych dozwolone są tylko indeksy pól). Ta funkcja umożliwia wykorzystanie indeksów do optymalizacji wyszukiwania, sortowania i łączenia operacji, używania kombinacji pól lub tworzenia wyrażeń z pól. Na przykład można indeksować pole Nazwa na podstawie wyrażenia za pomocą funkcji SOUNDEX () . W ten sposób Twoja aplikacja może zapewnić szybki dostęp do nazw, które brzmią tak samo.
Podczas dodawania indeksów do tabel należy zachować równowagę między zyskiem uzyskiwanym w czasie wyszukiwania a nieuniknionymi stratami, które wystąpią podczas aktualizowania indeksowanych tabel. Po dodaniu indeksów do tabel natychmiast operacje aktualizacji i wstawiania w tabelach zaczną działać wolniej, ponieważ Visual FoxPro będzie musiał zaktualizować każdy indeks.
Na koniec unikaj indeksowania pól zawierających tylko ograniczoną liczbę wartości dyskretnych, na przykład na polach logicznych. W tym przypadku indeks będzie zawierał niewiele danych i prawdopodobnie koszty utrzymania indeksu przeważą nad korzyściami, jakie uzyskasz z takiego indeksu podczas wyszukiwania.
Aby uzyskać szczegółowe informacje na temat efektywnego indeksowania podczas korzystania z technologii Rushmore, można zapoznać się z sekcją Korzystanie z Rushmore Query Optimization w celu przyspieszenia dostępu do danych .
Podczas tworzenia powiązań za pomocą polecenia SELECT - SQL Następujące sytuacje mogą zmniejszyć wydajność i doprowadzić do nieprzewidywalnych wyników:
- Podczas łączenia tabel w jednym z nich brakuje klucza podstawowego lub unikalnego.
- Tabele łączenia zawierają puste pola.
Aby uniknąć takich sytuacji, utwórz skojarzenia na podstawie relacji między kluczami głównymi w jednej tabeli i kluczy obcych w innej. Jeśli utworzysz połączenie na podstawie danych, które nie są unikalne, wynik końcowy może zawierać wszystkie dane z obu tabel. Na przykład następujące polecenie SELECT-SQL tworzy połączenie, którego wynik może być bardzo obszerny:
W tym przykładzie kod pocztowy będzie jednoznacznie identyfikował lokalizację klienta w mieście, ale może to nie wystarczyć, jeśli dopasujesz rekordy klienta do rekordów zamówień. Kod pocztowy nie identyfikuje jednoznacznie klienta lub zamówienia. Zamiast tego utwórz połączenie za pomocą następującego polecenia:
W tym przykładzie pole customer_id jednoznacznie identyfikuje konkretnego klienta i należące do niego zamówienia, dlatego tworzy zestaw wyników, który łączy rekordy klienta z każdym wpisem zamówienia.
Należy również zachować ostrożność podczas łączenia tabel z pustymi polami, ponieważ Visual FoxPro nie może porównywać pól z wartościami pustymi. Podczas tworzenia związku sprawdź wartości pól pod kątem ich kompletności.
Na przykład, jeśli założysz, że pole customer_id w tabeli Orders może być puste, użyj następującej komendy SELECT-SQL do filtrowania rekordów z klientami bez numeru:
Uwaga: Możesz również sprawdzić, czy pole znakowe jest pełne za pomocą funkcji PUSTY () , ale jest wolniejszy niż stała operacja porównania.
Korzystając z menedżera projektu, można połączyć nieograniczoną liczbę programów i procedur w jednym pliku .app lub .exe. Może to znacznie zwiększyć prędkość programu z dwóch powodów.
Najpierw Visual FoxPro otwiera plik programu i pozostawia go otwartym. Później, kiedy wydasz polecenie Rób w programie zawartym w pliku Visual FoxPro nie będzie musiał ponownie otwierać tego pliku.
Po drugie, aplikacja składająca się tylko z jednego lub dwóch plików zmniejsza liczbę plików przechowywanych w folderze roboczym. Szybkość wszystkich operacji na plikach wzrasta, ponieważ system operacyjny będzie sprawdzał mniej elementów w folderze podczas otwierania, zmiany nazwy lub usuwania plików.
Więcej informacji na temat używania menedżera projektu do tworzenia aplikacji można znaleźć w sekcji Kompilowanie aplikacji .
Aby utworzyć najszybsze tabele i indeksy, postępuj zgodnie z poniższymi wskazówkami.
- Jeśli buforowanie rekordów lub tabel nie jest włączone, użyj polecenia INSERT - SQL zamiast kilku komend APPEND BLANK i REPLACE, co jest szczególnie ważne w przypadku indeksowanych tabel w środowisku wielu użytkowników, ponieważ indeksy będą aktualizowane tylko raz.
- Jeśli chcesz dodać wiele rekordów do indeksowanej tabeli, szybciej będzie najpierw usunąć indeks, a następnie dodać rekordy, a następnie ponownie utworzyć indeks.
- Jeśli to możliwe, unikaj wywoływania funkcji w poleceniach SQL, zwłaszcza tych, które zwracają więcej niż jeden rekord. Faktem jest, że takie polecenia muszą być ponownie obliczane dla każdego rekordu (funkcje będą wywoływane ponownie za każdym razem). Jeśli utworzysz polecenie SQL z danymi zmiennymi, użyj wyrażeń nazwy lub podstawienia makr zamiast funkcji EVALUATE (). Jak dotąd najlepszą strategią jest dynamiczne tworzenie całego polecenia SQL, a nie tylko jego poszczególnych klauzul. Zobacz więcej na ten temat w sekcjach. Korzystanie z makr i Tworzenie nazwanych wyrażeń .
- Z reguły, jeśli często używasz tego samego indeksu, możesz poprawić wydajność aplikacji, okresowo sortując tabelę według wyrażenia indeksu.
- W środowisku wielu użytkowników należy używać plików .cdx zamiast plików .idx, ponieważ aktualizacja pojedynczego pliku .cdx jest szybsza niż wielu plików .idx.