none
Query lentissima con conversioni di date RRS feed

  • Domanda

  • Ciao a tutti,
    ho questa select:

    select count(*) from app.t_letturecontatorienergia
    where contatorienergia_id in (277,278,275,276)
    and dataoralettura between app.localtoutc(dateadd(s,1439,'2010-05-01 00:00:00')) and app.localtoutc(dateadd(dd,1,'2010-05-24 00:00:00'))
    and tiporicostruzione_id=5

    che per restituirmi circa 800 record ci mette oltre 6 minuti.
    Se escludo la where sulle date (la funzione app.localtoutc converte da data locale a UTC), è quasi istantanea.

    Come mai la between tra conversioni di date mi rallenta così tanto?
    E cosa potrei fare per migliorare?

    Grazie.

    Luigi

    martedì 25 maggio 2010 14:05

Risposte

  • salve Luigi,

    hai provato a fornire "una costante" alla proiezione, nel senso di

    DECLARE @Inizio datetime, @Fine datetime;

    SELECT @Inizio = app.localtoutc(dateadd(s,1439,'2010-05-01 00:00:00')) , @Fine = app.localtoutc(dateadd(dd,1,'2010-05-24 00:00:00'));
    SELECT .... FROM ... WHERE ... AND dataoralettura BETWEEN @Inizio AND @Fine;

    ?

    poi, probabilmente, potrebbe anche essere utile un indice su quella parte dell'attributo..

    saluti


    http://www.asql.biz - DbaMgr2k - DbaMgr and further SQL Tools
    • Contrassegnato come risposta Ciupaz mercoledì 26 maggio 2010 09:31
    martedì 25 maggio 2010 15:54
    Moderatore

Tutte le risposte

  • salve Luigi,

    hai provato a fornire "una costante" alla proiezione, nel senso di

    DECLARE @Inizio datetime, @Fine datetime;

    SELECT @Inizio = app.localtoutc(dateadd(s,1439,'2010-05-01 00:00:00')) , @Fine = app.localtoutc(dateadd(dd,1,'2010-05-24 00:00:00'));
    SELECT .... FROM ... WHERE ... AND dataoralettura BETWEEN @Inizio AND @Fine;

    ?

    poi, probabilmente, potrebbe anche essere utile un indice su quella parte dell'attributo..

    saluti


    http://www.asql.biz - DbaMgr2k - DbaMgr and further SQL Tools
    • Contrassegnato come risposta Ciupaz mercoledì 26 maggio 2010 09:31
    martedì 25 maggio 2010 15:54
    Moderatore
  • Caspita, si passa da diversi minuti a pochissimi secondi. Non so come, non so il perchè, ma il miglioramento è stato notevole.
    Grazie Andrea per la dritta.

    Luigi

    mercoledì 26 maggio 2010 09:31