Wydajność filtra na liście kontrahentów

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

marceynowa
Posty: 347
Rejestracja: 29 lut 2008, 11:27
Rola: Administrator CDN XL
Wersja: 2022
Lokalizacja: Gdynia

Wydajność filtra na liście kontrahentów

Post autor: marceynowa »

Mam filtr:

Kod: Zaznacz cały

Knt_GIDNumer in (SELECT KnS_KntNumer FROM cdn.KntOsoby WHERE KnS_Email LIKE '%' + ?@S100|Email:'' + '%') OR Knt_EMail LIKE '%' + ?@S100|Email:'' + '%'
Filtr wyszukuje po polu email na Osobach kontrahenta.
Kiedyś działał prawidłowo, po któreś aktualizacji znacząco spowolnił - trzeba czekać kilka minut, a czasami aplikacja się zawiesza.

Co jest nie tak w tym filtrze?

Lilpri
Posty: 180
Rejestracja: 13 maja 2019, 11:04
Rola: Administrator CDN XL

Re: Wydajność filtra na liście kontrahentów

Post autor: Lilpri »

U mnie na wersji 2025 działa przyzwoicie, ale mam raptem 8tys kontrahentów. Im więcej tego jest, tym filtr bardziej dostaje w dupę.
Dodatkowo nie masz jakiś kolumn powyciąganych? One + filtr potrafią zrobić masakrę

marceynowa
Posty: 347
Rejestracja: 29 lut 2008, 11:27
Rola: Administrator CDN XL
Wersja: 2022
Lokalizacja: Gdynia

Re: Wydajność filtra na liście kontrahentów

Post autor: marceynowa »

bazę ma trochę większą:
KntKarty: 46tys
KntOsoby: 52tyś

Kolumna dodatkowa była - wyłączyłem, bez zmian w szybkości filtra.

marceynowa
Posty: 347
Rejestracja: 29 lut 2008, 11:27
Rola: Administrator CDN XL
Wersja: 2022
Lokalizacja: Gdynia

Re: Wydajność filtra na liście kontrahentów

Post autor: marceynowa »

a taki filtr:

Kod: Zaznacz cały

Knt_GIDNumer in (select distinct Knt_GIDNumer from CDN.KntKarty WHERE Knt_Email LIKE '%' + ?@S100|Email:'' + '%')
działa poprawnie (szybko).

Awatar użytkownika
praiser
Posty: 1091
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Wydajność filtra na liście kontrahentów

Post autor: praiser »

Spróbuj

Kod: Zaznacz cały

Knt_GIDNumer in (
    select Knt_GIDNumer from CDN.KntKarty WHERE Knt_Email LIKE '%' + ?@S100|Email:'' + '%')
    UNION 
    select KnS_KntNumer FROM cdn.KntOsoby WHERE KnS_Email LIKE '%' + ?@S100|Email:'' + '%')
)
--------------------------------
Pozdrawiam
WW

marceynowa
Posty: 347
Rejestracja: 29 lut 2008, 11:27
Rola: Administrator CDN XL
Wersja: 2022
Lokalizacja: Gdynia

Re: Wydajność filtra na liście kontrahentów

Post autor: marceynowa »

niestety, taki sam efekt.

Awatar użytkownika
praiser
Posty: 1091
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Wydajność filtra na liście kontrahentów

Post autor: praiser »

jak masz dostęp do bazy to dodaj indeksy na te kolumny. powinno przyspieszyć

CREATE INDEX MojIndex_KntOsoby_Email ON cdn.KntOsoby(KnS_Email);
CREATE INDEX MojIndex_KntKarty_Email ON CDN.KntKarty(Knt_Email);
--------------------------------
Pozdrawiam
WW

rolski95
Posty: 121
Rejestracja: 21 lut 2019, 08:24
Rola: Administrator CDN XL

Re: Wydajność filtra na liście kontrahentów

Post autor: rolski95 »

Spróbuj tak:

Kod: Zaznacz cały

 exists (SELECT 1 FROM cdn.KntOsoby WHERE Knt_GIDNumer=KnS_KntNumer and KnS_Email LIKE '%' + ?@S100|Email:'' + '%') OR Knt_EMail LIKE '%' + ?@S100|Email:'' + '%'

ODPOWIEDZ