Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539

    PHP-SQL Server: è possibile velocizzare una query?

    Ciao,
    ho una semplicissima query..o almeno al momento lo è perchè è una semplice SELECT * FROM tabella, poi dovrò fare dei vari filtri...
    Il punto è che lavoro in un db SQL Server 2000 che contiene varie tabelle da oltre un milione di record; in giro su internet leggevo di persone che gestiscono senza problemi 7-10 milioni di record, quando io già solo per 1 milione non riesco a ottenere risultati perchè ci mette un tempo spropositato...parliamo di minuti e minuti...
    Non so quanto possa essere utile, ma questo è il *lunghissimo* codice in php:

    $query = "SELECT * FROM agents";
    $stmt = sqlsrv_query( $conn, $query);

    if ( $stmt )
    {

    while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
    //visualizzo i record
    }

    }

    potete darmi qualche consiglio?
    Grazie!!

  2. #2
    beh se non metti delle clausole where i tempi vanno in base al numero di record che lui cerca stampa a video, se poi metti dei filtri si può agire su quelli per ridurre i tempi di response.

    Dipende poi se usi dei link, dei =, match against, etc...

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    il problema è che anche con le where ci mette dei tempi mostruosi....

  4. #4
    posta il codice.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    guarda il codice è semplicissimo...

    $query = "SELECT AgentId, Extension, CampaignId, StartTime, EndTime, Duration, StartReason, EndReason, EntryId, LogSet, FieldClosedFlag";
    $query .= " FROM dbo.AgentAssignments";
    $query .= " WHERE (AgentId = 'AgId0596')";

    $stmt = sqlsrv_query( $conn, $query);

    if ( $stmt )
    {

    $count = 1;

    while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){

    print $count . " - AgentId: " . $row['AgentId'] . " - Duration: " . $row['Duration'] . " (" . secondsToWords($row['Duration']) . ")
    ";
    $count++;

    }

    }

    posso anche filtrare e raggruppare per data...(StartTime, EndTime), ma in caso di visualizzazione totale và in timeout dopo circa 7 minuti e 13136 record estratti.
    Dal momento che è la prima volta che lavoro con moli di lavoro così grandi, vorrei sapere quali sono più o meno i tempi di esecuzione per questo numero di record....nella tabella sono più di un milione..
    Grazie!!

    p.s. il codice è scarno perchè deve essere impaginato, ma è inutile che perdo tempo a farlo se poi la query non è fattibile...

  6. #6
    se devi caricare tutti quei dati inizia a mettere SELECT * , che i DBMS ci mettono piu tempo a filtrare, nel tuo caso, che a caricarsi tutto con *

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    è uguale, anche con SELECT * siamo a tempi da timeout...

  8. #8
    Originariamente inviato da n0t
    se devi caricare tutti quei dati inizia a mettere SELECT * , che i DBMS ci mettono piu tempo a filtrare, nel tuo caso, che a caricarsi tutto con *
    al massimo può variare il tempo per la copia dei dati che aumenta quando ci sono più dati da rendere disponibili a php, quindi aumenta con l'asterisco

    ovviamente stiamo parlando di aumenti impercettibili ^^

    Beh, la query non fa chissa che cosa, quindi non vedo molto di ottimizzabile, a parte il where: il campo su cui fai il filtraggio che campo è? Vi sono delle chiavi su?

    Inoltre ti va in timeout sul while o mentre lui esegue la query? E se ti va in timeout sul while hai provato a verificare quanto tempo impiega la query da sola?

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    ciao,
    scusa se rispondo solo ora...
    la tabella contiene una serie di record che registrano tutti i login-logout degli utenti ad un sistema; il filtraggio andrebbe quindi fatto per utente e data di login e logout, in maniera da sapere in un dato momento quante volte quell'utente è entrato ed uscito dal sistema.
    Non credo che i campi in questione siano indicizzati però....

  10. #10
    direi che ti sei risposto da solo: Non credo che i campi in questione siano indicizzati

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.