Maschera Collegata ad sql server lenta nella ricerca

di il
6 risposte

Maschera Collegata ad sql server lenta nella ricerca

Salve a tutti sto realizzando un gestionale su access collegato ad sql server 2014 la maschera dell' anagrafica va bene in fase di inserimento ma quando uso il cerca dei pulsanti di spostamento è lentissimo ed alla 4 parola del cognome si blocca per circa 20 secondi prima di andare avanti.

la maschera è collegata ad un vista che ha questo codice:
SELECT        dbo.AnagraficaGE.Id, dbo.AnagraficaGE.Matricola, dbo.AnagraficaGE.Cognome, dbo.AnagraficaGE.Nome, dbo.AnagraficaGE.SSMA_TimeStamp, .....etc,   dbo.Sindacato.Descrizione AS DescrizioneSindato, 
                         dbo.TabCittadinanza.Cittadinanza, dbo.TabQualificaPaga.Qualifica AS QualifcaPaga, dbo.TabQualificaPaga.[Descrizione Livello], dbo.Inquadramento.[Descrzione Inquadramento]
FROM            dbo.AnagraficaGE LEFT OUTER JOIN
                         dbo.TabCittadinanza ON dbo.AnagraficaGE.CodiceCittadinanza = dbo.TabCittadinanza.Codice LEFT OUTER JOIN
                         dbo.Sindacato ON dbo.AnagraficaGE.[Nome Sindacato] = dbo.Sindacato.Voce LEFT OUTER JOIN
                         dbo.TabQualificaPaga ON dbo.AnagraficaGE.Qualifica = dbo.TabQualificaPaga.[Codice Qualifica] LEFT OUTER JOIN
                         dbo.Inquadramento ON dbo.AnagraficaGE.Inquadramento = dbo.Inquadramento.[Codice Inquadramento]
con una connessione DSN
[ODBC]
DRIVER=ODBC Driver 11 for SQL Server
UID=*****
PWD=*****
DATABASE=ARCHIVIOGENERALE
WSID=************
APP=Microsoft Office 2013
SERVER=tcp:***********,49172
Description=ARCHIVIOGENERALE
la Vista contiene circa 27.000 record che non dovrebbero essere un problema
la vista contiene tutti e 27.000 record poi filtrati dalla maschera tramite il codice del cliente
ho pensato di creare tramite un tabledef un tabella provvisoria con i soli dati del cliente che mi servono, e che poi aggiorna gli eventuali i dati nel sql server alla chiusura della maschera, ma mi sembra poco comoda
La maschera ha circa 15 caselle combinate (ho provato a toglierne alcune ma non è cambiato nulla) ed è una maschera singola non continua
la maschera funziona bene negli inserimenti e negli spostamenti avanti e dietro, l' unico problema sta nella ricerca
Qualcuno sa darmi qualche indicazione di come velocizzare la ricerca?
premesso che sono veramente nuovo di sql server!
al momento sia il front end che sql server risiedono nello stesso computer

Grazie a tutti per i vs. sempre preziosi consigli!

6 Risposte

  • Re: Maschera Collegata ad sql server lenta nella ricerca

    La query è abbastanza "corposa" ma non è un problema. La velocità dipende se i campi di join sono indicizzati o no, poi non vedo Where quindi non ci sono condizioni?
  • Re: Maschera Collegata ad sql server lenta nella ricerca

    Oltreballe giuste osseevazioni mostra come applichi il filtro... perché se strutturato correttamente viene applicato lato server come puoi facilmente verificare con l'analizzatoee in SQLSERVER.
  • Re: Maschera Collegata ad sql server lenta nella ricerca

    Questa è la query dell' origine dati della maschera
    SELECT dbo_VistaMascheraAnagrafica.Id, dbo_VistaMascheraAnagrafica.Matricola, dbo_VistaMascheraAnagrafica.[Cod Cliente], dbo_VistaMascheraAnagrafica.Cognome, dbo_VistaMascheraAnagrafica.Nome,..... etc,  TabCliente.[Nome Cliente], TabCliente.Ufficio
    FROM TabCliente INNER JOIN dbo_VistaMascheraAnagrafica ON TabCliente.[Codice Cliente] = dbo_VistaMascheraAnagrafica.[Cod Cliente]
    WHERE (((dbo_VistaMascheraAnagrafica.[Cod Cliente])=[TempVars]![CodCliente]))
    ORDER BY dbo_VistaMascheraAnagrafica.Cognome, dbo_VistaMascheraAnagrafica.Nome;
    
    ovviamente ... etc sono tutti i campi che ho nella maschera che sono in totale 155
    dove [TemVars]![CodCliente] è il numero del cliente

    PS non so come usare l' analizzatore di sql server avete qualche guida da consigliare?
  • Re: Maschera Collegata ad sql server lenta nella ricerca

    Ripeto, la velocità dipende se i campi incrociati e quelli filtrati sono indicizzati.
  • Re: Maschera Collegata ad sql server lenta nella ricerca

    In che senso i campi incrocriati? il campo filtrato non è indicizzato, lo dovrei indicizzare sulla tabella o sulla vista? se sulla vista come si indicizza una vista? letto che non si puo con left join
  • Re: Maschera Collegata ad sql server lenta nella ricerca

    RIbadisco sempre quello che ti è stato fatto osservare sugli INDICI dei Campi relativi ai JOIN perchè è fondamentale, ma ecco sicuramente un problema tipico di chi non ha esperienza di lavoro tra ACCESS e un RDBMS ed è abituato a lavorare con Access in LOCALE:
    WHERE (((dbo_VistaMascheraAnagrafica.[Cod Cliente])=[TempVars]![CodCliente]))
    Se tu avessi analizzato la Query lato SERVER ti saresti accorto che SQLSERVER non riesce ad interpretare questa condizione, sicchè spara ad Access TUTTA la tabella e JET in locale la Filtra.

    Quindi hai 2 Opzioni, usare una Query Parametrica, passi il parametro, apri un Recordset e lo ASSEGNI RUNTIME alla Form, al Recordset della Form.

    Oppure molto più semplicemente usi la Proprietà Filter in questo modo
    
    Me.Filter="[Cod Cliente]=" & Me![CodCliente]
    Me.FilterOn=True

    e fai attenzione a come è scritta... perchè il parametro viene risolto in modo ESPLICITO dal VBA e passato al criterio già risolto, in questo modo il SERVER lo riesce ad interpretare e tramite il driver lo applica lato SERVER restituendo solo il Record necessario.
Devi accedere o registrarti per scrivere nel forum
6 risposte