It is currently 7 June 2025, 17:33 Advanced search

Segnalazione su SetMaxRows

Questo forum è nato con lo scopo di raccogliere le proposte di modifica di Instant Developer e discuterne insieme.

Segnalazione su SetMaxRows

Postby mtozzi » 14 December 2010, 10:33

La funzione setMaxRows consente di impostare il numero massimo di righe recuperate dal database per un pannello. Sarebbe molto utile che nel caso la funzione entri in gioco, cioé nel caso vengano scartati dei record rispetto all'insieme risultante dalla query venisse segnalata in qualche modo all'utente questa situazione.
Il funzionamento interno di questa funzione è abbastanza oscuro, sarebbe utile che il limite venisse imposto nella query SQL generata tramite il costrutto apposito, nel caso di DB2 la clausola "FETCH FIRST n ROWS ONLY" (esistono costrutti SQL analoghi anche per gli altri database). In questo modo si eviterebbe l'esecuzione effettiva sul database di query che vanno a selezionare più del dovuto con i problemi annessi.
mtozzi
 
Posts: 413
Joined: 2 November 2010, 9:33

Re: Segnalazione su SetMaxRows

Postby g.lanzi » 30 December 2010, 14:03

Mi sorgono delle domande. Noi utilizziamo la capacità del driver di svolgere questo compito. Ma quindi con l'uso del MaxRows attuale su DB2 viene eseguita una query che seleziona troppe righe?

Internamente non viene ordinato il resultset e poi vengono fornite al driver solamente le prime N righe? Per poter fornire le prime N righe di una determinata query potrebbe essere comunque necessario che il database internamente consideri tutta la tabella, ad esempio se si effettua un ordinamento o una condizione campi senza indice.

Forse basterebbe implementare una clausola TOP che implementi il codice che segnali, ma mi piacerebbe capire meglio il comportamento attuale su DB2 e la differenza con il codice che hai postato.
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Segnalazione su SetMaxRows

Postby mtozzi » 3 January 2011, 7:26

g.lanzi wrote:Forse basterebbe implementare una clausola TOP che implementi il codice che segnali, ma mi piacerebbe capire meglio il comportamento attuale su DB2 e la differenza con il codice che hai postato.

Questo è esattamente il risultato che vorrei ottenere, la clausola FETCH FIRST di DB2 è l'analogo della clausola TOP di SQLServer. Quello che succede ora utilizzando la setMaxRows è che, anche se la tabella ha gli indici corretti, la query impiega lo stesso tempo di esecuzione con o senza la setMaxRows, e vengono selezionati gli stessi record anche se poi di fatto ne vengono restituiti solo il numero impostato. Inoltre a livello di interfaccia utente non essendoci una segnalazione del troncamento del resultSet l'utente è portato a credere erroneamente che sia quello l'intero insieme dei dati che soddisfano la ricerca.
mtozzi
 
Posts: 413
Joined: 2 November 2010, 9:33

Re: Segnalazione su SetMaxRows

Postby mtozzi » 7 January 2011, 11:47

mtozzi wrote:Quello che succede ora utilizzando la setMaxRows è che, anche se la tabella ha gli indici corretti, la query impiega lo stesso tempo di esecuzione con o senza la setMaxRows, e vengono selezionati gli stessi record anche se poi di fatto ne vengono restituiti solo il numero impostato.

Dopo aver fatto prove più approfondite devo smentire questa affermazione nel senso che utilizzando la setMaxRows il tempo di risposta di una query è notevolmente migliore rispetto all'esecuzione senza l'impostazione del limite. In ogni caso sarebbe utile avere a disposizione la clausola TOP anche se la cosa più importante rimane il fatto di mostrare una notifica all'utente quando il risultato di una query viene troncato
mtozzi
 
Posts: 413
Joined: 2 November 2010, 9:33

Re: Segnalazione su SetMaxRows

Postby g.lanzi » 18 January 2011, 9:17

Mi fa piacere che la situazione attuale sia già competitiva in termini di performance.

Ma devo ammettere che mi viene una domanda: a cosa serve la top o la fetch first se maxrows fa già il lavoro giusto? Non ho capito in che modo è più comodo averla a disposizione.

Per sapere se il risultato è più piccolo a causa della Top(N) per adesso si può fare solo un'altra query di tipo SELECT COUNT() as Tot WHERE [Pannello.GetWHereClause] e vedere se Tot > N. Operazione da compiere solamente se il numero di righe tornate è uguale a N.
Naturalmente solo nei pannelli in cui serve, forse mi sbaglio ma immagino che non sia un problema diffuso su tutta l'applicazione bensì limitato ad alcune videate.
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Segnalazione su SetMaxRows

Postby mtozzi » 18 January 2011, 9:56

g.lanzi wrote:Ma devo ammettere che mi viene una domanda: a cosa serve la top o la fetch first se maxrows fa già il lavoro giusto? Non ho capito in che modo è più comodo averla a disposizione.

Più che più comodo lo vedo più sicuro visto che il costrutto sql FETCH FIRST o TOP fa parte del linguaggio sql implementato dal DBMS mentre la setMaxRows, come descritto nella vostra stessa documentazione, si appoggia su un'implementazione del driver jdbc che non è detto che ci sia o funzioni come deve.

g.lanzi wrote:Per sapere se il risultato è più piccolo a causa della Top(N) per adesso si può fare solo un'altra query di tipo SELECT COUNT() as Tot WHERE [Pannello.GetWHereClause] e vedere se Tot > N. Operazione da compiere solamente se il numero di righe tornate è uguale a N.

Abbiamo già implementato una soluzione di questo tipo ma visto che nel nostro caso riguarda numerosi pannelli abbiamo anche voluto generalizzarla quindi occorre poter leggere la master query di un oggetto IDPanel da codice, in particolare la FROM e la WHERE visto che ci interessa il COUNT, come ho descritto in questo post http://forum.progamma.com/viewtopic.php?f=2&t=58. La GetWHereClause non basta, occorre conoscere anche la FROM e nel caso la query comprenda più tabelle ora come ora non c'è un modo per farlo.
mtozzi
 
Posts: 413
Joined: 2 November 2010, 9:33

Re: Segnalazione su SetMaxRows

Postby g.lanzi » 25 January 2011, 11:54

E cosa ne dici della proposta che ti faccio nell'altro thread?
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Segnalazione su SetMaxRows

Postby mtozzi » 25 January 2011, 12:00

Direi che sarebbe perfetto :)
mtozzi
 
Posts: 413
Joined: 2 November 2010, 9:33

Re: Segnalazione su SetMaxRows

Postby g.lanzi » 25 January 2011, 12:06

ottimo :)
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Segnalazione su SetMaxRows

Postby sfirpo » 29 March 2011, 8:29

Forse mi sono perso qualcosa, ma non ho capito lo stato della proposta riguardante la clausola TOP (o FETCH FIRST n ROWS ONLY).
L'iconcina indica che è stata selezionata per l'implementazione? Sarà quindi sviluppata in futuro?
User avatar
sfirpo
 
Posts: 101
Joined: 26 October 2010, 12:50
Location: Genova

Next

Return to Proposte di modifica

Who is online

Users browsing this forum: No registered users and 12 guests