|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Junior Member
Iscritto dal: Oct 2012
Messaggi: 22
|
[SQL] Prestazioni di una query annidata
Il mio dubbio è su questa piccola query:
Codice:
SELECT *
FROM MATCHES
WHERE UPDATE_TIME >
(SELECT UPDATE_TIME
FROM SESSIONS
WHERE NOT UPDATED AND SID = 'abc')
Cambiando l'ordine delle condizioni Quote:
Magari ipotizzando che SID è un indice univoco a 32 caratteri e più o meno una sessione su due ha UPDATED fissato a FALSE. Grazie mille a chi si interesserà! Preciso che il dbms è apache derby, ma immagino sia poco influente visto che la gestione dovrebbe essere bene o male simile per tutti i dbms. |
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Quote:
Sempre meglio specificare i campi necessari. P.S ma recordset vuote è = 0?
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: Oct 2012
Messaggi: 22
|
Quote:
Con recordSet vuoto intendo: Codice:
(SELECT UPDATE_TIME
FROM SESSIONS
WHERE NOT UPDATED AND SID = 'abc')
Dato che deve essere chiamata centinaia di volte al minuto, è indispensabile che dopo che il select interno non abbia prodotto risultati la query si fermi là e lasci stare l'altra tabella, che è anche piuttosto grande. |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Quote:
Fai una prova con qualcosa che sai essere vuoto e vedi come si comporta e in base a quello ti regoli, no?
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
ripensandoci.
(*) (SELECT UPDATE_TIME FROM SESSIONS WHERE NOT UPDATED AND SID = 'abc') Se la (*) ha un risultato è ok. Se ne ha 0 ti restituisce NULL e quindi scazza. Se hai + di un risultato sei finito e schianti il DB. Gli operatori > e < sono binari alla fine. Che db usi, tanto per sapere.
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
L'ordine degli operandi non importa ci pensa il db a scegliere l'ordine migliore in base agli indici che ha a disposizione. |
|
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Oct 2012
Messaggi: 22
|
Perfetto, quindi la query non ha problemi, il dbms
The_ouroboros: una query senza risultati non restituisce null ! Nel caso torni più di un risultato (cosa impossibile, pura curiosità) il dbms come si comporta, va in errore immagino. Ah, uso apache derby, come scritto nel primo post! Grazie! |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Quote:
Inviato dal mio HUAWEI U8825-1 con Tapatalk 2
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: Oct 2012
Messaggi: 22
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
ha detto che è impossibile non che non è NULL
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
#11 |
|
Junior Member
Iscritto dal: Oct 2012
Messaggi: 22
|
No, ha detto che la query principale è impossibile dal momento che la subquery torna un vuoto
(da quanto ho capito) anche se la subquery tornasse un NULL (non è il nostro caso) la query principale sarebbe impossibile dato che (leggendo questa pagina http://en.wikipedia.org/wiki/Null_%28SQL%29) la condizione INT > NULL non si verifica mai. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Dipende dal DBMS. MySQL, ad esempio, ha forti problemi con le subquery, che non riesce a trasformare in join et similia o a sfruttare gli indici, e capita non di rado che una query semplice si trasformi in una table scan... ripetuta parecchie volte.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
davero?
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Si per via di come costruisce le join internamente mysql ha sempre avuto problemi con quel genere di query. Diciamo che a volte cerca di aiutare la subquery spostando una o più condizioni dalla principale a quella annidata ma facendolo a volte fa casini.
Quella postata così a naso non dovrebbe avere problemi. |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Quote:
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:04.




















