Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    Efficienza: query o str_replace

    Sfruttano più risorse le query o le operazioni su stringhe tipo la funzione str_replace?

    Mi spiego meglio:

    Eseguo una query che estrapola 50 inserzioni dal mio database. Ognuna di queste inserzioni ha la propria url salvata in un'altra tabella del db.
    Alla fine la mia funzione restituisce una stringa con tutte le inserzioni formattate html e relative url.
    Escludo a priori di fare delle JOIN perchè per tabelle molto piene impiega parecchio tempo.

    Ecco le 3 diverse possibilità che potrei applicare:

    Premetto che questa è la funzione che mi restituisce l'url
    Codice PHP:
    function get_url($id){
         
            
    $array_url = array();
            
            
    $res_url myQuery("SELECT * FROM `"._TBL_url_."` WHERE id= $id");
            while (
    $row mysql_fetch_array($res_url))
            
    $array_url[$row['id']] = $row['url'];
     
            return 
    $array_url;


    1)
    Codice PHP:
    #recupero le inserzioni
    $query "SELECT * FROM `"._TBL_inserzione_."` $where ORDER BY $ordina ".$limit;
       
    $rec_post myQuery($query);
       while (
    $row mysql_fetch_array($rec_post)) {
                
                
    #eseguo 1 query per recuperare l'url (per ogni inserzione)
                
    $link get_url($row['id']);
                
                
    $output .= '[url="'.$link.'"]'.$row['titolo'].'[/url]';

       } 

    2)
    Codice PHP:
    #recupero le inserzioni
    $query "SELECT * FROM `"._TBL_inserzione_."` $where ORDER BY $ordina ".$limit;
       
    $rec_post myQuery($query);
       while (
    $row mysql_fetch_array($rec_post)) {
                
                
    #memorizzo tutti gli id delle inserzioni di cui mi serve l'url
                
    if(!isset($id_in)) $id_in $row['id']; else $id_in .= ','.$row['id'];
                
    #creo un riconoscimento univico dell'url {link_id}
                #che utilizzerò per la funzione str_replace
            
    $link '{link_'.$row['id'].'}';
                
                
    $output .= '[url="'.$link.'"]'.$row['titolo'].'[/url]';

       }

    #recupero tutte le url con un'unica query sfruttando la funzione 'IN' e l'insieme ID
    $array_url =  get_url($id_in);

    #sostituisco i riconoscimenti univoci con l'url
    foreach($array_url as $k => $val)
    $output str_replace '{link_'.$k.'}'$val$output); 

    3)
    Codice PHP:
    #recupero le inserzioni
    $query "SELECT * FROM `"._TBL_inserzione_."` $where ORDER BY $ordina ".$limit;
       
    $rec_post myQuery($query);

       while (
    $row mysql_fetch_array($rec_post)){
           
    #memorizzo tutti gli id delle inserzioni di cui mi serve l'url
           
    if(!isset($id_in)) $id_in $row['id']; else $id_in .= ','.$row['id'];
       }
       
       
    #recupero tutte le url con un'unica query sfruttando la funzione 'IN' e l'insieme ID
       
    $array_url =  get_url($id_in);


       
    ## eseguo un'altra volta il while
       
    while ($row mysql_fetch_array($rec_post)) {
                
                
    #adesso ho già il link
            
    $link $array_url[$row['id']];
                
                
    $output .= '[url="'.$link.'"]'.$row['titolo'].'[/url]';

       } 
    Qual'è il metodo più veloce e meno dispendioso di risorse del server in base alle vostra conoscenze? C'è un metodo milgiore?

    Grazie
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  2. #2
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    Mi sono reso conto che la terza soluzione non funziona non è possibile eseguire il secondo ciclo while: dovrei fare un'altra query e sarebbe quindi così:


    3
    Codice PHP:
    #recupero le inserzioni 
    $query "SELECT * FROM `"._TBL_inserzione_."` $where ORDER BY $ordina ".$limit
       
    $rec_post myQuery($query); 

       while (
    $row mysql_fetch_array($rec_post)){ 
           
    #memorizzo tutti gli id delle inserzioni di cui mi serve l'url 
           
    if(!isset($id_in)) $id_in $row['id']; else $id_in .= ','.$row['id']; 
       } 
        
       
    #recupero tutte le url con un'unica query sfruttando la funzione 'IN' e l'insieme ID 
       
    $array_url =  get_url($id_in); 


       
    $query "SELECT * FROM `"._TBL_inserzione_."` $where ORDER BY $ordina ".$limit
       
    $rec_post myQuery($query); 
       while (
    $row mysql_fetch_array($rec_post)) { 
                 
                
    #adesso ho già il link 
            
    $link $array_url[$row['id']]; 
                 
                
    $output .= '[url="'.$link.'"]'.$row['titolo'].'[/url]'

       } 
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  3. #3
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    up
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  4. #4
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    up
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  5. #5
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    up
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  6. #6

    Re: Efficienza: query o str_replace

    Originariamente inviato da gasmor
    Sfruttano più risorse le query o le operazioni su stringhe tipo la funzione str_replace?

    Escludo a priori di fare delle JOIN perchè per tabelle molto piene impiega parecchio tempo.

    Qual'è il metodo più veloce e meno dispendioso di risorse del server in base alle vostra conoscenze? C'è un metodo milgiore?

    Grazie
    Sfruttano sicuramente più risorse le operazioni sulle stringhe, è sempre consigliato far fare il più possibile al database.

    Il fatto che le JOIN siano lente è probabilmente dovuto alla mancanza di indici o a query non scritte nella maniera corretta. Utilizza la funzione "EXPLAIN" di mySQL per scovare il collo di bottiglia...

    Il metodo più veloce è sicuramente quello di eseguire il minor numero possibile di query, facendo però fare tutto quello che è possibile dal database.
    « Se nella prima mezz'ora non capisci chi è il pollo, allora il pollo sei tu. » [Thomas "Amarillo Slim" Preston, campione del mondo di poker]

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.