Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [mysql] query da 36 secondi

    Ho una query così
    codice:
    SELECT time, col_1, col_2 FROM tabella WHERE date_format(time,'%Y-%m-%d') = '2011-10-04' ORDER BY time LIMIT 1
    Viene eseguita in 36 secondi.

    Posso ottimizzare qualcosa o è colpa di altro?

    La tabella ha 1,400,044 righe (e sono in continua crescita..)
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469

    Re: [mysql] query da 36 secondi

    Originariamente inviato da ricman
    Ho una query così
    codice:
    SELECT time, col_1, col_2 FROM tabella WHERE date_format(time,'%Y-%m-%d') = '2011-10-04' ORDER BY time LIMIT 1
    Viene eseguita in 36 secondi.

    Posso ottimizzare qualcosa o è colpa di altro?

    La tabella ha 1,400,044 righe (e sono in continua crescita..)
    non mi è chiaro che c'entri il date_format (tanto per iniziare); verifica inoltre l'esistenza di un indice sul campo time.
    (detto tra di noi è male usare nomi di campi riservati)
    codice:
    show index from tabella

  3. #3

    Re: Re: [mysql] query da 36 secondi

    Originariamente inviato da franzauker
    non mi è chiaro che c'entri il date_format (tanto per iniziare);
    Perchè sul db registro la data in questo modo (timestamp): "2011-01-21 10:36:03" e a me serve prendere l'ultima valore della data in php " date("Y-m-d") "
    codice:
    SELECT time, col_1, col_2 FROM tabella
    		WHERE date_format(time,'%Y-%m-%d') = '" . date("Y-m-d") . "' 
    		ORDER BY time
    		LIMIT 1

    Originariamente inviato da franzauker
    verifica inoltre l'esistenza di un indice sul campo time.
    (detto tra di noi è male usare nomi di campi riservati)
    Non c'è l'indice sul campo "time".
    Purtroppo ormai è "troppo tardi" per cambiare il nome del campo...
    Un indice (forse messo in automatico da phpmyadmin) è sul campo "id".
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  4. #4
    Tra l'altro se voglio aggiungere un indice mi fa anche scegliere se voglio "aggiungere un indice" o "aggiungere un indice unico".

    Che mi consigli? (E l'indice mi farebbe la differenza?)
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da ricman
    Perchè sul db registro la data in questo modo (timestamp): "2011-01-21 10:36:03" e a me serve prendere l'ultima valore della data in php " date("Y-m-d") "...
    Quindi è superfluo
    Non c'è l'indice sul campo "time".
    ...Tra l'altro se voglio aggiungere un indice mi fa anche scegliere se voglio "aggiungere un indice" o "aggiungere un indice unico".

    Che mi consigli? (E l'indice mi farebbe la differenza?)
    Non puoi mettere "unico" (sarebbe una chiave primaria).
    E sì, ti fa la differenza

  6. #6
    Originariamente inviato da franzauker
    Quindi è superfluo
    Ma io in un minuto registro anche 2 o 3 record ... percui selezionavo "il minuto" e tramite il Limit 1 prendevo l'ultimo dei valori di quel minuto ...

    Può essere migliorato?
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da ricman
    Ma io in un minuto registro anche 2 o 3 record ... percui selezionavo "il minuto" e tramite il Limit 1 prendevo l'ultimo dei valori di quel minuto ...

    Può essere migliorato?
    è "superfluo" perchè mysql già capisce benissimo qualcosa tipo
    codice:
    select * from documenti where datadocumento >='2011-05-30';

  8. #8
    Originariamente inviato da franzauker
    è "superfluo" perchè mysql già capisce benissimo qualcosa tipo
    codice:
    select * from documenti where datadocumento >='2011-05-30';
    Quindi, scusa, questo:
    Codice PHP:
    date_format(time,'%Y-%m-%d') = '" . date("Y-m-d") . "' 
    è uguale a questo?
    Codice PHP:
    time>= '" . date("Y-m-d") . "' 
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da ricman
    Quindi, scusa, questo:
    Codice PHP:
    date_format(time,'%Y-%m-%d') = '" . date("Y-m-d") . "' 
    è uguale a questo?
    Codice PHP:
    time>= '" . date("Y-m-d") . "' 
    ti basta mettere nella query
    ...time >='2011-05-30'
    ---
    Hai messo anno, mese, giorno, (data), NON il tempo (ore minuti secondi).
    Puoi lasciare benissimo nel php le funzioni di conversione, ma non è che siano strettamente (in questo caso) necessarie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.