Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    168

    [MySQL] durata esecuzione query

    Ciao ragazzi, sto lanciando delle queries che si occupino di fare il join tra tabelle molto grandi! Per evitare che il pc si blocchi, dopo aver definito chiave primaria e indici, sto
    utilizzando la funzione LIMIT, nativa di MySQL , che consente di
    determinare con precisione quanti record selezionare. Ho impostato
    10000000 righe alla volta e inizialmente ottenevo una durata media di
    esecuzione della query di circa 1h e ora non ricevo un risultato prima delle 3/4h.
    Sapete se ci sono ulteriori modi per velocizzare l'esecuzione di una query?
    Al momento sto eseguendo la query con LIMIT 170000001,180000000 e mi chiedo: c'è un modo per sapere anticipatamente quando questo "calvario" giungerà al termine? Mi spiego meglio: vorrei avere una stima del numero totale di righe che compongono la mia tabella finale.
    Aiutatemi, please!

  2. #2
    limit da, n.righe
    per sapere dove inizia "da" in presenza di un order by deve estrarre tutte le sante righe e quindi si limita al result set da mostrare ma non alle righe da controllare.

    LIMIT 170.000.001,180.000.000

    tu non stai chiedendo 10.000.000 di righe, ma stai chiedendo 180.000.000 milioni di righe a partire dalla riga 170.000.001

    Forse hai una JOIN non proprio corretta. Ad ogni modo se vuoi conoscere velocemente le righe che andrai ad estrarre fai una query con select count (*)

    select count(*) as tot from etc.etc.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    168
    La mia query è la seguente:

    create table nome_tabella_3
    type="INNODB"
    select B.attr1, A.attr2, B.attr3, B.attr4, B.attr5, B.attr6, B.attr7, B.attr8, A.attr9, B.attr10
    from nome_tabella_1 A join nome_tabella_2 B
    on (a.attr1=B.attr2)
    LIMIT 170.000.001,180.000.000

    La join è corretta? Non risulta alcun errore!
    Sto lanciando ripetutamente questa query (cambiando ovviamente LIMIT) e non capisco perchè dici che "non sto chiedendo 10.000.000 di righe, ma sto chiedendo 180.000.000 milioni di righe a partire dalla riga 170.000.001" -->180.000.000 - 170.000.001 non sono 10.000.000?

  4. #4
    Originariamente inviato da lilux
    La mia query è la seguente:

    create table nome_tabella_3
    type="INNODB"
    select B.attr1, A.attr2, B.attr3, B.attr4, B.attr5, B.attr6, B.attr7, B.attr8, A.attr9, B.attr10
    from nome_tabella_1 A join nome_tabella_2 B
    on (a.attr1=B.attr2)
    LIMIT 170.000.001,180.000.000

    La join è corretta? Non risulta alcun errore!
    Sto lanciando ripetutamente questa query (cambiando ovviamente LIMIT) e non capisco perchè dici che "non sto chiedendo 10.000.000 di righe, ma sto chiedendo 180.000.000 milioni di righe a partire dalla riga 170.000.001" -->180.000.000 - 170.000.001 non sono 10.000.000?
    LIMIT a partire dal record 170.000.001 mi rendi le successive 180.000.000 di righe.

    LIMIT NON e' da ... a, ma a partire da "a" mi dai le "nn righe" che ti chiedo.

    LIMIT 5, 10

    non rende dalla 5 alla 10, ma rende n. 10 righe a partire dalla riga 5 e quindi le righe del result set saranno dalla 5 fino alla 14.


    sempre questo a prescindere dalla correttezza della struttura. Suona malissimo che per ogni attributo tu debba avere un campo diverso.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.