14 messaggi dal 21 luglio 2009
Ciao a tutti,
sto cercando di tirare fuori. per la mia applicazione, dai dati da un DB tramite questa query:

SELECT
ERMAN.MINSAN, ERMAN.EAN, ERMAN.CODEMEA, ERMAN.CODINT, ERMAN.DES, ERMAN.DISCR, ERMAN.PREZZO, ERMAN.DATVAL, ERMAN.PREZZOVECCHIO, Ditte.RagSociale, ERMAN.DATREV, ERMAN.Classe, ERMAN.ATC, ATC.Descrizione, ERMAN.InCommercio, ERMAN.FonteRevoca, ERMAN.DataFineVend, TipoRicetta.Descrizione AS Descrizione_Ricetta, TipoProdotto.Descrizione AS Tipo_Prodotto, RegimeSSN.Descrizione AS Regime_SSN"

FROM
ERMAN, Ditte, ATC, TipoRicetta, TipoProdotto, RegimeSSN"

WHERE
ERMAN.CODDITTA = Ditte.CodDitta AND ERMAN.ATC = ATC.Codice AND ERMAN.TipoRicetta = TipoRicetta.Codice AND ERMAN.TIPOPROD = TipoProdotto.Codice AND ERMAN.SSN = RegimeSSN.Codice

Visto ke i dati all'interno del DB sono molti, circa 200000, la query è a dir poco lentissima.

Come potrei fare per ottimizzarla?
Grazie anticipatamente del vostro aiuto.
Saluti

Robybas
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
innanzitutto provvedi a cambiare la sintassi dei join in modo da renderli espliciti in conformita' con lo standard ANSI 92, quindi
FROM ERMAN
  JOIN Ditte ON ...
  JOIN ATC ON ...
  JOIN TipoRicetta ON ...
  JOIN TipoProdotto ON ...
  JOIN RegimeSSN ON ...


da qui puoi subito riconoscere che la proiezione coinvolge 6 tabelle ed il relativo peso prestazionale puo' essere elevato...
detto cio', almeno per iniziare, consiglierei la generazione di appositi indici su tutte le colonne che referenzino tabelle esterne, quindi indicizzare dal lato del referenziante tutte le colonne coinvolte nelle join...
poi bisognerebbe valutare i piani di esecuzione, e qui ogni rdbms ha un po' i suoi strumenti... SQL Server consente di vederli anche graficamente tramite SQL Server Management Studio, ma il fatto che tu utilizzi ancora lo standard di join ANSI 89 mi fa pensare che sia legato ad altro dbms...
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
14 messaggi dal 21 luglio 2009
tipo così:
Select (ERMAN.MINSAN as Minsan, ERMAN.EAN as Ean, ERMAN.DES as Des, ERMAN.PREZZO as prezzo, ERMAN.DATAVAL as DataVal, ERMAN.CODEMEA as CodEmea, ERMAN.ATC as atc, ATC.DESCRIZIONE as atc_descrizione, ERMAN.PREZZOVECCHIO as prezzovecchio,DITTE.RagSociale as RagSociale, ERMAN.DATREV as datrev, ERMAN.REVOCA as revoca,
TipoProdotto.Descrizione as descrizione_TipoProdotto, RegimeSSN.Descrizione as DescrizioneSSN, ERMAN.Classe as Classe, Erman.InCommercio as InCommercio,TipoRicetta.Descrizione as descrizioneRicetta, ERMAN.DataFineVend as datafinvendita, ERMAN.Discr as Discr)
From ERMAN
INNER JOIN ATC
on ERMAN.ATC = ATC.Codice
INNER JOIN Ditte
on ERMAN.CODDITTA = Ditte.CodDitta
INNER JOIN FonteRevoca
on ERMAN.FonteRevoca = FonteRevoca.Codice
INNER JOIN TipoProdotto
on ERMAN.TIPOPROD = TipoProdotto.Codice
INNER JOIN RegimeSSN
on ERMAN.SSN = RegimeSSN.Codice
INNER JOIN TipoRicetta
on ERMAN.TipoRicetta = TipoRicetta.Codice

Va bene così?
Modificato da robybas il 06 agosto 2012 13.57 -
14 messaggi dal 21 luglio 2009
Credo che questa query funzioni. Solo ke non ho ancora capito perkè ci siano ancora errori di codice:

Select ERMAN.MINSAN AS MinSan,ERMAN.EAN AS EAN,ERMAN.CODEMEA AS CODEMEA,ERMAN.CODINT AS CodInt,ERMAN.DES AS Des,ERMAN.DISCR AS DISCR,"
+ "ERMAN.PREZZO AS PREZZO,ERMAN.DATVAL AS Datval,ERMAN.PREZZOVECCHIO AS PrezzoVecchio,ERMAN.DATREV AS DatRev,ERMAN.Classe,"
+ "ATC.Descrizione AS DescrizioneAtc,Ditte.RagSociale AS RagioneSociale,FonteRevoca.Descrizione AS FonteRevoca,TipoProdotto.Descrizione AS TipoProdotto,"
+ "RegimeSSN.Descrizione AS RegimeSSN,TipoRicetta.Descrizione AS DescriozioneRicetta,ERMAN.ATC,ERMAN.DataFineVend AS DataFineVendita"
+ "From ERMAN INNER JOIN ATC on ERMAN.ATC = ATC.Codice INNER JOIN Ditte on ERMAN.CODDITTA = Ditte.CodDitta INNER JOIN FonteRevoca on ERMAN.FonteRevoca = FonteRevoca.Codice INNER JOIN TipoProdotto"
+ "on ERMAN.TIPOPROD = TipoProdotto.Codice INNER JOIN RegimeSSN on ERMAN.SSN = RegimeSSN.Codice INNER JOIN TipoRicetta on ERMAN.TipoRicetta = TipoRicetta.Codice"

L'errore è il seguente:
ERROR [42000] [Microsoft][Driver ODBC Microsoft Access] L'istruzione SELECT include una parola riservata o un argomento scritto in modo errato o mancante oppure la punteggiatura non è corretta .
Aiutoooooooo!!!!!!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.