Jak zoptymalizować program Microsoft Access podczas korzystania ze źródeł danych ODBC

Uwaga

Nazwa usługi Office 365 ProPlus została zmieniona na Aplikacje usługi Microsoft 365 dla przedsiębiorstw. Aby uzyskać więcej informacji na temat tej zmiany, przeczytaj ten wpis w blogu.

Zaawansowane. Wymaga kodowania eksperta, współdziałania i umiejętności wielu użytkowników.

Ten artykuł dotyczy tylko bazy danych programu Microsoft Access (.mdb lub .accdb).

Podsumowanie

W tym artykule opisano kilka porad dotyczących poprawy wydajności podczas uzyskiwania dostępu do danych ze źródła danych ODBC.

Więcej informacji

Skorzystaj z poniższych porad, aby zwiększyć wydajność dzięki źródłom danych ODBC:

  • Ograniczanie ilości danych, o które prosi serwer. Nie pytaj o więcej danych, niż potrzebujesz. Za pomocą zapytań zaznacz tylko potrzebne pola i wiersze.

  • Używaj tylko tych funkcji, których potrzebujesz. Migawki są mniej zaawansowane od dynaset i nie można ich aktualizować. Migawki mogą być jednak szybsze, szczególnie w przypadku małych rekordów bez pól typu Nota lub Obiekt OLE.

  • Tworzenie połączonych (dołączonych) tabel w celu uzyskania dostępu do danych serwera. Unikaj "bezpośredniego" dostępu do serwera (czyli nie otwieraj zdalnych baz danych i uruchamiaj dla nich zapytań). Zamiast tego należy tworzyć dołączone tabele lub zapytania pass-through.

  • Dobrze przejrzyj projektowanie pól listy i pól kombi. W formularzu każde pole listy, pole kombi, podformularz i kontrolka zawierające sumę wymagają oddzielnego zapytania. W przypadku danych lokalnych wydajność może być odpowiednia. Jednak w przypadku danych zdalnych podczas otwierania formularza mogą wystąpić duże opóźnienia, ponieważ każde zapytanie musi zostać wysłane do serwera i aby można było otworzyć formularz, musi zostać zwrócona odpowiedź.

  • Unikaj dużych pól kombi. W tym polu kombi z setkami, a nawet tysiącami opcji do wyboru opartych na tabeli lokalnej może okazać się akceptowalny czas odpowiedzi, szczególnie w przypadku zdefiniowania odpowiedniego indeksu w tabeli lokalnej. Jednak w przypadku tabeli zdalnej takie pole kombi umożliwia spowolnienie wydajności, ponieważ wyczerpuje zasoby serwera i sieci w związku z pobieraniem danych w celu wypełnienia listy. Podczas pracy z danymi zdalnymi najlepiej jest ograniczyć liczbę wierszy zwracanych do pola kombi. Dane można także rozerwać na mniejsze pola kombi (nosząc to na uwadze poradę powyżej).

  • Polecenia Znajdź należy używać tylko w przypadku mniejszych rekordów. Aparat bazy danych Microsoft Jet optymalizuje polecenie Find, aby dobrze działało z lokalnymi pakietami rekordów o niemal dowolnym rozmiarze i względem zdalnych rekordów o rozsądnym rozmiarze. Jednak w przypadku dużych zdalnych rekordów (tysięcy rekordów lub więcej) zamiast tego należy utworzyć filtr lub zapytanie, a także zachować ostrożność w przypadku stosowania ograniczeń, które może przetwarzać serwer.

  • Upewnij się, że zapytania są wysyłane do serwera w celu przetworzenia. Najważniejszym czynnikiem w wydajności zapytań w przypadku danych zdalnych jest zapewnienie, że serwer działa jak najwięcej zapytania. Aparat bazy danych Microsoft Jet próbuje wysłać całe zapytanie na serwer, ale ocenia lokalnie wszelkie klauzule i wyrażenia zapytań, które nie są na ogół obsługiwane przez serwery ani przez określony serwer. Funkcje, które nie są ogólnie obsługiwane przez serwery, obejmują:

  • Operacje, których nie można wyrazić w pojedynczej instrukcji SQL. Taka sytuacja może wystąpić, gdy używasz zapytania jako danych wejściowych innego zapytania lub gdy klauzula FROM zapytania zawiera zapytanie sum lub zapytanie DISTINCT. Często można zmienić rozmieszczenie zapytań, aby obliczyć sumy po wszystkich innych operacjach.

    • Operacje, które są rozszerzeniami języka SQL specyficznymi dla aparatu bazy danych Microsoft Jet, takimi jak zapytania krzyżowe, zapytania TOP i raporty z wieloma poziomami grupowania i sum. Zwróć uwagę, że do serwerów można wysyłać proste zapytania krzyżowe.
    • Wyrażenia zawierające operatory lub funkcje specyficzne dla programu Microsoft Access. Funkcje finansowe i agregowane statystyczne programu Microsoft Access nie mają odpowiedników serwera.
    • Funkcje języka Visual Basic for Application zdefiniowane przez użytkownika, które jako argumenty biorą kolumny zdalne. Te funkcje nie istnieją na serwerze, ale muszą przetwarzać zdalne dane kolumn. Jeśli jednak funkcja zdefiniowana przez użytkownika zwraca jedną wartość i nie odwołuje się do kolumny zdalnej, funkcja jest szacowana lokalnie, a jej wartość jest wysyłana do serwera w celu przetworzenia.
    • Mieszanie typów danych tekstowych i liczbowych w operatorach lub danych wyjściowych zapytania UNION. Większość serwerów nie ma leniencyjnie typu danych programu Microsoft Access. Z tego powodu należy w razie potrzeby używać jawnych funkcji konwersji.
    • Niejednorodne sprzężenia między tabelami lokalnymi i tabelami zdalnymi lub między tabelami zdalnymi z różnych źródeł danych ODBC. Sprzężenia między małymi tabelami lokalnymi i dużymi tabelami zdalnymi, gdzie kolumna sprzężenia jest indeksowana, mogą skutkować zdalnym sprzężeniami indeksu. W zdalnym sprzężeniach indeksu do serwera jest wysyłane jedno zapytanie dla każdego wiersza w tabeli lokalnej i zwracane są tylko wiersze łączące.
    • Wyrażenia, których nie można zdalnie wysłać, ponieważ nie mogą być obliczane przez serwer. Wyrażenia wyjściowe, których nie można zdalnie wykonać (te w klauzuli SELECT), nie wymuszają lokalnego określenia zapytania, chyba że wystąpią w zapytaniu sumernym, zapytaniu DISTINCT lub zapytaniu UNION. Wyrażenia nie remoteable w innych klauzulach (WHERE, ORDER BY, GROUP BY, HAVING i tak dalej) wymuszają, aby co najmniej część zapytania była szacowana lokalnie.
  • Serwery różnią się w niektórych obszarach obsługiwanych funkcji. Po dołączeniu tabeli zdalnej aparat bazy danych Microsoft Jet wysyła zapytanie do sterownika ODBC w celu jego możliwości. Jeśli sterownik i serwer są obsługiwane wymagane funkcje, aparat bazy danych Microsoft Jet wysyła operację do serwera w celu przetworzenia. Jeśli nie, aparat bazy danych Microsoft Jet wykonuje operację lokalnie. Do różnych obszarów pomocy technicznej należą (ale nie wyłącznie) następujące obszary:

    • Sprzężenia zewnętrzne. Pamiętaj, że aparat bazy danych Microsoft Jet nie wysyła wielu sprzężenia zewnętrznego do serwera, chociaż wiele sprzężenia wewnętrznego może dołączyć do pojedynczego sprzężenia zewnętrznego.
    • Funkcje liczbowe, ciągu oraz daty/czasu, takie jak Log(), Mid$(), DatePart() i tak dalej.
    • Funkcje konwersji, takie jak CInt(), CStr(), CVDate() i tak dalej.