Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-06-2009, 17:42   #1
Trigger2009
Bannato
 
Iscritto dal: Jun 2009
Messaggi: 44
[MySql] Enorme dubbio su query...domani devo consegnare...please help me :-/

Ciao,
allora la situazione è la seguente: devo ottimizzare una query di questo tipo (facciamo subito l'esempio pratico):

Ho una tabella INSERZIONE fatta così:

Codice:
INSERZIONE:
mysql> DESCRIBE INSERZIONE;
+-----------------+-----------------------+------+-----+---------+----------------+
| Field           | Type                  | Null | Key | Default | Extra          |
+-----------------+-----------------------+------+-----+---------+----------------+
| Id_Oggetto      | int(11)               | NO   | PRI | NULL    | auto_increment |
| Titolo          | varchar(60)           | NO   | MUL | NULL    |                |
| Descrizione     | text                  | YES  |     | NULL    |                |
| Costo_Base      | decimal(6,2)          | YES  |     | NULL    |                |
| Compralo_Subito | decimal(6,2)          | YES  |     | NULL    |                |
| Scadenza        | datetime              | YES  | MUL | NULL    |                |
| Stato_Oggetto   | enum('nuovo','usato') | YES  |     | NULL    |                |
| Id_Venditore    | varchar(20)           | NO   |     | NULL    |                |
| Id_Categoria    | varchar(30)           | NO   |     | NULL    |                |
+-----------------+-----------------------+------+-----+---------+----------------+
I cui campi Titolo ed Oggetto sono indicizzati

La mia professoressa dice che se ho una query del tipo questa:

Codice:
SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
WHERE Scadenza > '2009-05-27 01:28:00' AND Scadenza < '2009-05-27 01:28:05'
OR Titolo = 'Kommodor 64';
sarà lenta perchè MySql usa un solo indice per query (fà riferimento alla versione 5.0 di MySql) e se non può utilizzare nessun indice utilizza una full table scan.

Mentre se prendo la stessa query e la ristrutturo dividendola in 2 UNION:

Codice:
SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
WHERE Scadenza > '2009-05-27 01:28:00' AND Scadenza < '2009-05-27 01:28:05'
UNION
SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
WHERE Titolo = 'Kommodor 64';
sarà molto più veloce perchè avrà la possibilità di usare un indice per ogni UNION.

Ho un db molto popolato...le ho provate entrambe e danno risultati praticamente identici...come mai? cosa c'è di sbagliato?

Vi prego è urgentissimo...devo terminare entro questa sera...

Grazie
Trigger2009 è offline   Rispondi citando il messaggio o parte di esso
Old 29-06-2009, 20:56   #2
Trigger2009
Bannato
 
Iscritto dal: Jun 2009
Messaggi: 44
please...qualcuno che ci illumina? Sono le ultime ore buone per ricevere un'illuminazione...domani alle 11:00 consegno tuto e quel che è fatto è fatto e quel che non è fatto non è fatto
Trigger2009 è offline   Rispondi citando il messaggio o parte di esso
Old 29-06-2009, 20:59   #3
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
un augurio niente di +...
purtroppo non so aiutarti...
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 29-06-2009, 23:14   #4
Rintrah84
Bannato
 
Iscritto dal: Jun 2009
Città: Roma
Messaggi: 102
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
un augurio niente di +...
purtroppo non so aiutarti...
doh ci avevo sperato che qualcuno fosse passato ad illuminarmi...vabbè grazie dell'augurio....io glielo porto così...poi speriamo che il lavoro le vada bene...
Rintrah84 è offline   Rispondi citando il messaggio o parte di esso
Old 29-06-2009, 23:21   #5
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Hai buttato un occhio all'explain della query?
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 29-06-2009, 23:21   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Spero solo di darti uno spunto dato che non sono a livelli universitari con i db.

Quello che volevo dirti di provare era semplicemente:

Codice:
SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
WHERE Scadenza BETWEEN '2009-05-27 01:28:00' AND '2009-05-27 01:28:05'
UNION ALL
SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
WHERE Titolo = 'Kommodor 64';
Non ho una mole di dati come la tua, non potrei neanche provare
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-06-2009, 23:38   #7
Trigger2009
Bannato
 
Iscritto dal: Jun 2009
Messaggi: 44
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Spero solo di darti uno spunto dato che non sono a livelli universitari con i db.

Quello che volevo dirti di provare era semplicemente:

Codice:
SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
WHERE Scadenza BETWEEN '2009-05-27 01:28:00' AND '2009-05-27 01:28:05'
UNION ALL
SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
WHERE Titolo = 'Kommodor 64';
Non ho una mole di dati come la tua, non potrei neanche provare
Ci mette sempre circa lo stesso tempo...poi di volta in volta che lo rieseguo cambia...nel senso che credo dipenda anche da quante risorse mi succhiano gli altri programmi...comunque anche questa versione ci mette circa lo stesso tempo dell'altra...
Cosa dovrebbe cambiare la tua versione dalla mia? dire UNION non è come dire UNION ALL?

posto gli EXPLAIN delle due query, riuscite a dirmi se la forma finale è la stessa e a motivarmela in qualche modo?

Codice:
QUERY ORIGINALE:

mysql> explain
    -> SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
    -> WHERE Scadenza > '2009-05-27 01:28:00' AND Scadenza < '2009-05-27 01:28:05'
    -> OR Titolo = 'Kommodor 64'
    -> \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: INSERZIONE
         type: index_merge
possible_keys: Titolo,Scadenza_Index
          key: Scadenza_Index,Titolo
      key_len: 9,62
          ref: NULL
         rows: 4
        Extra: Using sort_union(Scadenza_Index,Titolo); Using where
1 row in set (0.00 sec)

QUERY CHE USA LA UNION:

mysql> EXPLAIN
    -> SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
    -> WHERE Scadenza BETWEEN '2009-05-27 01:28:00' AND '2009-05-27 01:28:05'
    -> UNION ALL
    -> SELECT Id_Venditore, Titolo, Descrizione, Costo_Base FROM INSERZIONE
    -> WHERE Titolo = 'Kommodor 64'\G
*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: INSERZIONE
         type: range
possible_keys: Scadenza_Index
          key: Scadenza_Index
      key_len: 9
          ref: NULL
         rows: 6
        Extra: Using where
*************************** 2. row ***************************
           id: 2
  select_type: UNION
        table: INSERZIONE
         type: ref
possible_keys: Titolo
          key: Titolo
      key_len: 62
          ref: const
         rows: 2
        Extra: Using where
*************************** 3. row ***************************
           id: NULL
  select_type: UNION RESULT
        table: <union1,2>
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: NULL
        Extra:
3 rows in set (0.01 sec)
Grazie
Trigger2009 è offline   Rispondi citando il messaggio o parte di esso
Old 29-06-2009, 23:41   #8
Trigger2009
Bannato
 
Iscritto dal: Jun 2009
Messaggi: 44
Dai ragazzi....illuminateci...io e Rintrah stiamo facendo questo progetto insieme...domani la proff lo controlla e dopomani esame orale...se non le va bene ci spella vivi a tutti e due
Trigger2009 è offline   Rispondi citando il messaggio o parte di esso
Old 30-06-2009, 08:24   #9
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
A differenza di cosa ha detto la professoressa, sembra proprio che invece MySql abbia operato una Merge di 2 indici. Nel piano di esecuzione puoi infatti leggere "index_merge", che ha svolto fondendo appunto insieme gli indici che avete messo sulle 2 colonne.

PS: Usa la BETWEEN sempre, in entrambe le scritture
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 30-06-2009, 09:37   #10
Trigger2009
Bannato
 
Iscritto dal: Jun 2009
Messaggi: 44
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
A differenza di cosa ha detto la professoressa, sembra proprio che invece MySql abbia operato una Merge di 2 indici. Nel piano di esecuzione puoi infatti leggere "index_merge", che ha svolto fondendo appunto insieme gli indici che avete messo sulle 2 colonne.

PS: Usa la BETWEEN sempre, in entrambe le scritture
Ok,
ora correggo e mando in stampa...grazie !!! LA BEETWEN per cosa?

Tnx
Trigger2009 è offline   Rispondi citando il messaggio o parte di esso
Old 30-06-2009, 09:38   #11
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da Trigger2009 Guarda i messaggi
Ok,
ora correggo e mando in stampa...grazie !!! LA BEETWEN per cosa?

Tnx
WHERE Scadenza BETWEEN '2009-05-27 01:28:00' AND '2009-05-27 01:28:05'
anche nella prima query.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 30-06-2009, 09:54   #12
Trigger2009
Bannato
 
Iscritto dal: Jun 2009
Messaggi: 44
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
WHERE Scadenza BETWEEN '2009-05-27 01:28:00' AND '2009-05-27 01:28:05'
anche nella prima query.
ok e a livello di prestazioni cambia qualcosa? perchè? come gli giustifico che èmeglio usar beetwen che specificare il range?
Trigger2009 è offline   Rispondi citando il messaggio o parte di esso
Old 30-06-2009, 12:16   #13
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da Trigger2009 Guarda i messaggi
ok e a livello di prestazioni cambia qualcosa? perchè? come gli giustifico che èmeglio usar beetwen che specificare il range?
Cambia a livello di engine, che sara' piu' stimolato ad usare una INDEX RANGE SCAN.
Oppure comunque ad ottimizzare il filtro durante l'esecuzione.

Quindi indirettamente anche prestazioni.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
Black Friday OPPO: prezzi a picco su sma...
Arriva il nuovo Amazon Haul per il Black...
Mafia: Terra Madre: arriva il Free Ride ...
L'UE approva 70 progetti (anche in Itali...
Nuovo Cayenne Electric: è la Pors...
Adobe acquisisce Semrush per 1,9 miliard...
Black Friday Ecovacs: i migliori robot a...
Prime Video lancia i Video Recaps: la fu...
Tutti i prodotti FRITZ!Box scendono di p...
Copilot Actions può installare ma...
Corsair lancia le promozioni Black Frida...
Google apre a Taipei il suo più g...
iPhone Fold avrà la batteria con ...
Unity ed Epic Games uniscono le forze: u...
Il Black Friday di 3i: tre robot aspirap...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v