Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zaawansowane: wymaga specjalistycznego kodowania, współdziałania i wielodostępnych umiejętności.
Ten artykuł dotyczy tylko bazy danych programu Microsoft Access (.mdb lub .accdb).
Podsumowanie
W tym artykule opisano kilka wskazówek dotyczących poprawy wydajności podczas uzyskiwania dostępu do danych ze źródła danych ODBC.
Więcej informacji
Skorzystaj z poniższych wskazówek, aby zwiększyć wydajność źródeł danych ODBC:
Ogranicz ilość danych, których żądasz od serwera. Nie pytaj o więcej danych, niż potrzebujesz. Użyj zapytań, aby wybrać tylko potrzebne pola i wiersze.
Używaj tylko potrzebnych funkcji. Migawki są mniej wydajne niż zestawy dynaset i nie można ich aktualizować. Jednak migawki mogą być szybsze, szczególnie w przypadku małych zestawów rekordów bez pól Nota lub Obiekt OLE.
Utwórz tabele połączone (dołączone), aby uzyskać dostęp do danych serwera. Unikaj "bezpośredniego" dostępu do serwera (oznacza to, że nie otwieraj zdalnych baz danych i nie uruchamiaj względem nich zapytań). Zamiast tego utwórz dołączone tabele lub utwórz zapytania przekazywane.
Projektowanie list pól i pól kombi mądrze. 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 mogą wystąpić duże opóźnienia podczas otwierania formularza, ponieważ każde zapytanie musi zostać wysłane do serwera, a odpowiedź musi zostać zwrócona przed otwarciem formularza.
Unikaj dużych pól kombi. Uwzględnienie pola kombi z setkami, a nawet tysiącami opcji w oparciu o tabelę lokalną może dać akceptowalny czas odpowiedzi, zwłaszcza jeśli zdefiniujesz odpowiedni indeks w tabeli lokalnej. Jednak w przypadku tabeli zdalnej takie pole kombi zapewnia powolną wydajność, ponieważ opróżnia zasoby serwera i sieci podczas pobierania danych w celu wypełnienia listy. Najlepiej ograniczyć liczbę wierszy zwróconych do pola kombi podczas pracy z danymi zdalnymi. Możesz również podzielić dane na mniejsze pola kombi (mając na uwadze powyższą końcówkę).
Użyj polecenia Znajdź tylko w mniejszych zestawach rekordów. Aparat bazy danych Microsoft Jet optymalizuje polecenie Find, aby działało dobrze z lokalnymi zestawami rekordów o niemal dowolnym rozmiarze i względem zdalnych zestawów rekordów o rozsądnym rozmiarze. Jeśli jednak masz duże zdalne zestawy rekordów (tysiące rekordów lub więcej), należy zamiast tego utworzyć filtr lub zapytanie, a także uważać na użycie ograniczeń, które serwer może przetwarzać.
Upewnij się, że zapytania są wysyłane do serwera w celu przetworzenia. Najważniejszym czynnikiem wydajności zapytań względem danych zdalnych jest zapewnienie, że serwer uruchamia jak najwięcej zapytań. Aparat bazy danych Microsoft Jet próbuje wysłać całe zapytanie do serwera, ale ocenia lokalnie wszelkie klauzule zapytania i wyrażenia, które nie są ogólnie obsługiwane przez serwery lub określony serwer. Ogólnie rzecz biorąc, funkcje nieobsługiwane przez serwery obejmują następujące funkcje:
Operacje, których nie można wyrazić w jednej instrukcji SQL. Taka sytuacja może wystąpić, gdy zapytanie jest używane jako dane wejściowe do innego zapytania lub gdy klauzula FROM zapytania zawiera zapytanie Sumy lub zapytanie DISTINCT. Często można zmienić rozmieszczenie zapytań, aby obliczyć sumy po wszystkich innych operacjach.
- Operacje, które są rozszerzeniami sql specyficznymi dla aparatu bazy danych firmy Microsoft Jet, takimi jak zapytania krzyżowe, zapytania TOP i raporty z wieloma poziomami grupowania i sum. Należy pamiętać, że proste zapytania krzyżowe mogą być wysyłane do serwerów.
- Wyrażenia zawierające operatory lub funkcje specyficzne dla programu Microsoft Access. Funkcje finansowe i agregacje statystyczne programu Microsoft Access nie mają odpowiedników serwera.
- Zdefiniowane przez użytkownika funkcje Visual Basic for Application, które przyjmują kolumny zdalne jako argumenty. Te funkcje nie istnieją na serwerze, ale muszą przetwarzać dane kolumn zdalnych. Jeśli jednak funkcja zdefiniowana przez użytkownika zwraca pojedynczą wartość i nie odwołuje się do kolumny zdalnej, funkcja jest oceniana 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 zapytań UNION. W większości serwerów nie ma złagodzenia sankcji dotyczących typów danych w programie Microsoft Access. W związku z tym należy użyć jawnych funkcji konwersji, jeśli jest to konieczne.
- Sprzężenia heterogeniczne między tabelami lokalnymi i tabelami zdalnymi lub między tabelami zdalnymi w różnych źródłach danych ODBC. Sprzężenia między małymi tabelami lokalnymi i dużymi tabelami zdalnymi, w których jest indeksowana kolumna sprzężenia, mogą spowodować zdalne sprzężenia indeksu. W zdalnym sprzężeniu indeksu jedno zapytanie dla każdego wiersza w tabeli lokalnej jest wysyłane do serwera i zwracane są tylko wiersze łączące.
- Wyrażenia lub wyrażenia, których nie można zdalnie wysłać, nie można zdalnie wysyłać, ponieważ nie mogą być oceniane przez serwer. Nieodsuwalne wyrażenia wyjściowe (w klauzuli SELECT) nie wymuszają lokalnej oceny zapytania, chyba że wystąpią w zapytaniu Sumy, zapytaniu DISTINCT lub zapytaniu UNION. Wyrażenia niezbywalne w innych klauzulach (WHERE, ORDER BY, GROUP BY, HAVING itd.) wymuszają ocenę co najmniej części zapytania 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 o jego możliwości. Jeśli wymagana funkcja jest obsługiwana przez sterownik i serwer, aparat bazy danych Microsoft Jet wysyła operację do serwera w celu przetworzenia. W przeciwnym razie aparat bazy danych Microsoft Jet wykonuje operację lokalnie. Obszary różnej obsługi obejmują (ale nie są ograniczone do) następujące obszary:
- Sprzężenia zewnętrzne. Należy pamiętać, że aparat bazy danych Microsoft Jet nie wysyła wielu sprzężeń zewnętrznych do serwera, chociaż wiele sprzężeń wewnętrznych może towarzyszyć pojedynczemu sprzężenia zewnętrznemu.
- Funkcje liczbowe, ciągowe i data/godzina — takie jak Log(), Mid$(), DatePart() i tak dalej.
- Funkcje konwersji — takie jak CInt(), CStr(), CVDate() i tak dalej.