• User

    Limitare la ricerca in una query MySQL

    Salve a tutti, ho una domanda per ottimizzare il tempo necessario per effettuare alcune query.
    E' possibile limitare la ricerca ad un dato numero di record estratti?
    Mi spiego meglio: voglio dire al database, trova i primi 10 record che soddisfano determinati criteri, e quando li hai trovati, interrompi la ricerca.
    Ci sarebbe la clausola LIMIT, ma questa agisce solo sulla visualizzazione dei record trovati, in sostanza limita solo il numero di record che vengono visualizzati, ma la query è portata a termine fino in fondo.
    Esiste invece una qualche procedura per interrrompere la ricerca una volta trovato il num. di record specificato, in modo da rendere la query più veloce? Magari con un WHERE? boh


  • User

    non e' necessaria, nel senso che la se fai al ricerca su campi chiave, una volta che ha trovato i record corrispondenti si ferma non si analizza tutta/ la tabella.

    inoltre puoi avere una idea del numero di righe analizzate usando explain


  • User

    Ho una domanda che si ricollega a questo.

    Ho una tabella INNO_DB in MySQL che potrà arrivare ad avere circa 50000 records, da cui ho bisogno di estrarre i totali degli importi degli articoli.
    Considerando che ogni articolo può essere ripetuto più volte (diciamo in media fino a 5 volte), ed è contraddistinto da un ID indicizzato, dovrei calcolare con una SELECT SUM il totale importo per ogni articolo.

    Quindi, se l?ID è indicizzato, facendo
    SELECT SUM(importo) FROM tabella WHERE id=x
    dovrebbero essere analizzati solo i campi per i quali la clausola WHERE è soddisfatta, dato che ID è un indice: in questo modo verranno analizzati solo 5 campi di media e non 50000, giusto?

    Ho provato ad utilizzare EXPLAIN SELECT SUM, e mi indica ROWS 4: questo dato dovrebbe essere il numero effettivo di rows analizzate, giusto? che corrisponde con i campi effettivamente interessati dalla SELECT SUM, cioè i campi che soddisfano la condizione WHERE
    Infatti se faccio EXPLAIN SELECT SUM, utilizzando come campo condizionale nella clausola WHERE un campo non indicizzato, ROWS restituisce il numero totale di campi nella tabella.

    In ultima analisi, facendo la query su un campo indicizzato, non vengono analizzate tutte le righe, giusto? quindi il carico di lavoro per il database trascurabile (almeno nel mio caso con poche ripetizioni per ogni articolo)

    Ho ragione?

    Possibili risposte:

    1. Sì, sei un grande, hai capito tutto di MySQL:vaiii:
    2. Hai ragione fino a un certo punto... 😉
    3. Non hai capito un accidenti :arrabbiato:
    4. Ma di ke stai a parlà? :mmm:
    5. Con questa bella giornata, non te ne potevi andare al mare? :fumato:

    PS Scusate l'esaurimento 😄


  • User

    1 :d


  • Super User

    Io opto per la 5 :D...
    no scherzo...hai capito tutto di come funziona mysql 🙂


  • User

    Grazie, sapevo di essere un genio :fagiano: