Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [MySQL] Quale ricerca?

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714

    [MySQL] Quale ricerca?

    Ciao a tutti.

    Mi hanno consigliato di utilizzare il MATCH, AGAINST come ricerca in un database MySQL per due motivi:

    1. Le ricerche sono molto piu' attinenti alla keyword
    2. Si possono ordinare i risultati per attinenza.

    Il problema e' che la query, e' molto lenta nella sue esecuzione su tabelle di grosse dimensioni, e quando dico grosse, intendo oltre 500 mila record.

    Su un server dedicato, banda illimitata, dual core, poche applicazioni presenti, il tempo di esecuzione e' di circa 10 secondi. Il risultato lo mostra, ma che fatica..!

    Utilizzando il LIKE '%keyword%' invece, i risultati sono pressoche instantanei, 1, 2 secondi massimo di esecuzione, ma chiaramente non ho tutta questa precisione e, importante, non posso ordinare per attinenza.

    Come risolvere?

    Grazie,
    Antonio

  2. #2
    Implementare un sistema di caching?
    Creare un dizionari delle keyword, indicizzarlo ed utilizzarlo come sistema di ricerca?
    Pre-indicizzare i record in base al dizionario ed aggiornare questo indice in fase di aggiornamento/agginta di nuovi record?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714
    Ciao Filippo,
    e grazie per i consigli che molte volte mi hanno tirato fuori dai guai.

    Potresti spiegarti meglio.

    Quello che ho capito e' di creare per ogni keyword, un file di testo da interrogare, che e' stato precedentemente creato in base alla query.

    Non rischio cosi i creare n file per n keyword?

    Antonio

  4. #4
    Non mi riferivo a dei file di testo ma di indici in un database.

    Crea una serie di tabelle che ti permetta di "associare" ogni keyword ai relativi record. In questo modo la selezione sarà molto più veloce. Puoi anche aggiungere un campo numerico che indica il livello di attinenza tra la keyword ed il record ed utilizzarlo poi in fase di ordinamento.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714
    Ok.
    poniamo il caso che io faccia una cosa di questo tipo.

    Ho la mia tabella con i contenuti, es. aziende

    aziende - 500 mila record

    Faccio una ricerca con la keyword MILANO (tutte le aziende che tra i campi FULLTEXT hanno Milano).

    Sono 60 mila.

    Inserisco altri 60 mila record in una tabella, es. cache con keyword milano e id dell'azienda?

    Dopo 100 ricerche diverse, con una media di 30.000 risultati, il mio db impazzirebbe..

    Sbaglio qualcosa?

  6. #6
    Perchè "il mio db impazzirebbe"?

    Una query di selezione con una query su un campo numerico indicizzato, per quanto grande possa essere, risulta piuttosto veloce. Inoltre nessuno vieta di implementare l'indice utilizzando altri strumenti (es. file binary) che permettono di ottenere performance anche migliori.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714
    Ok, mi documento in tal modo e cerco soluzioni.

    Nel frattempo ho constatao che paradossalmente se faccio 1 query per ogni risultato, la velocità e' quasi instantane.

    Invece di fare un SELECT *, MATCH....

    SELECT id, MATCH..

    E per ogn iiterazione.

    SELECT * FROM aziendere WHERE id

    Antonio

  8. #8
    Forse potrebbe anche esserti utile date un'occhiata a Sphinx

    http://www.sphinxsearch.com/

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.