Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    Velocizzare select...multi query?

    ciao a tutti.
    io ho 15 tabelle con struttura di 2 campi: id (indice) e testo.
    il totale dei record supera abbondantemente i 5 milioni...
    se io cerco una stringa all'interno del testo ci mette tempo, ma tuttavia col comando

    Codice PHP:
    lock tables 
    qualcosa guadagno.

    il mio problema è dato dal fatto che devo mettere a girare un ciclo di 1000 e più (fino a 30.000) stringhe...e devo fare la ricerca su tutte le righe che ho...insomma...ci metto una vita e mezzo...

    ho pensato di fare la ricerca direttamente sui file di testo (che precedentemente importo in mysql), ma non credo risparmierei tempo...ho pensato a qualche stratagemma per inviare 10-20-100 query al secondo, ma non so come applicarlo!

    avete idee a riguardo?

    grazie mille, saluti!


  2. #2
    come è impostata ora la ricerca nelle 15 tabelle?
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  3. #3
    Codice PHP:
    if (isset($_POST['tab']))
    {
        
    $tabella $_POST['tab'];
        foreach(
    $tabella as $tab)
        {

    mysql_query("LOCK TABLES $tab READ");




    $data->read($_FILES["file"]["name"]);
    for (
    $i 2$i <= $data->sheets[0]['numRows']; $i++) {
        for (
    $j 1$j <= $data->sheets[0]['numCols']; $j++) {



    $querya mysql_query("SELECT * FROM $tab where SUBSTRING(riga, 382, 9) like '%".$np."%' and SUBSTRING(riga, 391, 4) like '%".$af."%' order by id ASC ");




    while(
    $resultsa mysql_fetch_array($querya)) {
    $stringa $resultsa['riga'];

    .......... 
    mi sembra una normale select, sto ancora pensando al modo di inviare 5-10 query alla volta, ma come?

  4. #4
    Non ho ben chiaro cosa sia una normale query, ma queste sopra mi pare abbastanza espensiva.
    Se capisco correttamente fai ricerche all'interno di campi testo sulla base di pezzi di stringhe multiple.

    Innanzitutto: che motore usi? MyIsam o Innodb? Le prestazioni tra i due differiscono parecchio, soprattutto per quanto riguarda l'indicizzazione di campi character. MyIsam consente ad esempio l'indicizzazione FULLTEXT.

    Inoltre, non mi piace l'idea di far eseguire query multiple, hai fatto dei benchmark aggregando i dati di due o più tabelle per vedere i risultati?

    Le tabelle come sono strutturate poi? Hanno valori duplicati? un UNION o UNION ALL sarebbe di aiuto?

    Non conosco la struttura del tuo db, nè perché hai 15 tabelle più o meno simili, ma prenderei in esame la possibilità di migrare ad altra piattaforma (ad esempio PostgreSQL) che supporti le materialized views, che a quanto ne so purtroppo non sono ancora supportate in MySQL.

    Restando in MySQL potresti però escogitare un qualche workaround che ti permetta di simularne l'impiego di una materialized view, caricando i dati un una tabella ad-hoc e gestendone l'aggiornamento periodico via gli Events.
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  5. #5
    Originariamente inviato da webus
    Restando in MySQL potresti però escogitare un qualche workaround che ti permetta di simularne l'impiego di una materialized view, caricando i dati un una tabella ad-hoc e gestendone l'aggiornamento periodico via gli Events.
    scusa la mia ignoranza, ma devo aggiornarmi un po' forse




    ...anche se la prima cosa che faccio è provare ad aggregare i dati delle tabelle in un'unica tabella



    grazie cmq, mi metto alla ricerca!

  6. #6
    Originariamente inviato da webus
    Innanzitutto: che motore usi? MyIsam o Innodb? Le prestazioni tra i due differiscono parecchio, soprattutto per quanto riguarda l'indicizzazione di campi character. MyIsam consente ad esempio l'indicizzazione FULLTEXT.

    Le tabelle come sono strutturate poi? Hanno valori duplicati? un UNION o UNION ALL sarebbe di aiuto?
    motore MyISAM e le tabelle non hanno valori duplicati.


    ho appena rilanciato la query e...............



  7. #7
    Originariamente inviato da k_abuto
    scusa la mia ignoranza, ma devo aggiornarmi un po' forse

    ...anche se la prima cosa che faccio è provare ad aggregare i dati delle tabelle in un'unica tabella

    grazie cmq, mi metto alla ricerca!
    In breve: una materialized view è una sorta di view (cioé una tabella ottenuta dal risulatato di una query) che invece di essere costruita al momento della esecuzione della query come avviene per una view, resta memorizzata sul disco (e per questo motivo richiede pure l'allocazione di un spazio capace di contenerla) che si autoaggiorna in base a dei criteri personalizzabili.
    È l'ideale in presenza di problema di performance e quando la "freschezza" dei dati non è così prioritaria.

    Qui trovi un esempio di pseudo-materialized view in MySQL.
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  8. #8
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691
    devi creare degli indici.

    Spieghi un pò meglio questo:
    SUBSTRING(riga, 382, 9) like '%".$np."%'
    ...altri 5 anni di purga...

  9. #9
    Originariamente inviato da alpeweb
    devi creare degli indici.

    Spieghi un pò meglio questo:
    SUBSTRING(riga, 382, 9) like '%".$np."%'
    ho un campo id che mi fa da chiave primaria, non basta come indice? :master:

    la riga in cui faccio la ricerca è di circa 500 caratteri, ogni porzione di questa riga corrisponde a qualcosa...per esempio i 9 caratteri a partire dal 382esimo sono il Numero Pratica.





  10. #10
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691
    ecco quello potrebbe essere il tuo indice...
    ma devi creare il campo e poi l'indice sulla tabella.

    aggiungi un campo e lo chiami indicePratica sul quale inserisci un indice
    (normal o unique)

    poi fai una query del tipo:
    Update $tab set indicePratica = SUBSTRING(riga, 382, 9)

    ripeti l'operazione per per l'altro indice

    e modifichi la tua query
    SELECT * FROM $tab where indicePratica=$np .. ecc

    e vedrai le tue query volare!
    ...altri 5 anni di purga...

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.