Po dłuższej przerwie w blogowaniu postanowiłem napisać kilka dobrych rad przy stosowaniu Command:
1. Nie należy łączyć ze sobą kilku Command lub Command z tabelą/widokiem bezpośrednio crystalu.
Zamiast tego należy przepisać zapytanie ze złączenia do jednego command. Dzięki temu zapytaniem zajmie się motor bazy danych i prześle tylko wynikowe dane. W przeciwnym razie to Crystal Reports pobiera dane z poszczególnych źródeł i ostro walczy na komputerze klienta co objawia się bardzo wolnym generowaniem raportu.
2. Nie filtrować command za pomocą standardowej opcji Selection Formula.
Zamiast tego należy dodać where do zapytania SQL w Command. Dzięki temu filtrowanie będzie po stronie bazy danych z użyciem indeksów (jeśli istnieją). W przeciwnym Crystal Reports pobiera wszystkie dane z Command i filtruje lokalnie, co najczęściej prowadzi do bardzo wolnego generowania raportu i zapychania łączą.
3. Nie używać standardowych parametrów do filtrowania Command.
W Command jest osobna opcja do tworzenia parametru. Wartość tego parametru będzie doklejona do zapytania SQL i przetworzona po stronie bazy danych. To również przyspieszy przetwarzanie raportu.
Niestety parametry typu command są uboższe od standardowych, ale w większości przypadków wystarczają.
4. Zastąpić Command procedurą składowaną (o ile mamy takie uprawnienia i umiejętności)
Źródłem raportu może być procedura składowana (stored procedure). Jeśli procedura posiada jakieś parametry to Crystal Reports utworzy na ich podstawie standardowe parametry w raporcie.
Procedura składowana będzie wydajniejsza niż Command, gdyż plan wykonania oraz jej kompilacja będzie odkładana w cache'u bazy danych. Kolejne wywołania będą szybsze niż poprzednie, czego nie można uzyskać przy command, bo są to dla bazy danych, kolejne nowe zapytania SQL i musi je za każdym na nowo przetwarzać.
Komentarze