Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    154

    [MySQL] Velocizzare tabella molto grande

    Buonasera ragazzi, ho una tabella con circa 15 milioni di righe e ovviamente le ricerche impiegano molto tempo, anche 10 minuti. Volevo sapere se c'è un modo per velocizzare un po' il processo di ricerca.. Grazie!
    Mess with the best die like the rest.

  2. #2
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    E' una domanda genericissima e si hanno poche informazioni per poterti aiutare

    La tabella come è fatta ?
    La tabella ha degli indici ? su che colonne ?
    Che tipo di ricerche effettui ? quali sono le query che usi ?
    Il risultato della query quanto è grande ? (cioè ti viene restituito un dataset da 100 righe o da 2000000)

    (non ultimo, ovviamente, su che hardware gira ? perchè se mi dici che hai un pentium 2 con 64 MB di RAM )

  3. #3
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Uso degli indici, vista limitata ai soli campi utili, database piu' potente, uso di SSD, eccetera: la soluzione dipende da tanti fattori e va valutata per il caso specifico... il tuo "una tabella" non consente di essere piu' precisi
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    154
    Questa è la tabella:

    codice:
    CREATE TABLE `geoname` (
      `geonameid` INT,
      `name` varchar(200),
      `asciiname` varchar(200),
      `alternatenames` varchar(5000),
      `latitude` DECIMAL(10,7),
      `longitude` DECIMAL(10,7),
      `feature class` char(1),
      `feature code` varchar(10),
      `country code` char(2),
      `cc2` char(60),
      `admin1 code` varchar(20),
      `admin2 code` varchar(80),
      `admin3 code` varchar(20),
      `admin4 code` varchar(20),
      `population` bigint,
      `elevation` INT,
      `gtopo30` INT,
      `timezone` varchar(100),
      `modification date` date
    )
    CHARACTER SET utf8;
    Mess with the best die like the rest.

  5. #5
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Originariamente inviato da comas17
    La tabella ha degli indici ? su che colonne ?
    Che tipo di ricerche effettui ? quali sono le query che usi ?
    Il risultato della query quanto è grande ? (cioè ti viene restituito un dataset da 100 righe o da 2000000)

  6. #6
    Originariamente inviato da br1
    ... uso di SSD ...
    SSD=Solid State Disk? o è altro?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    154
    La tabella ha degli indici ? su che colonne ?
    Che tipo di ricerche effettui ? quali sono le query che usi ?
    Il risultato della query quanto è grande ? (cioè ti viene restituito un dataset da 100 righe o da 2000000)

    (non ultimo, ovviamente, su che hardware gira ? perchè se mi dici che hai un pentium 2 con 64 MB di RAM )
    Scusa l'ignoranza, come avrete visto di MySQL so davvero poco, e non ho ben capito gli indici sinceramente.. Ma comunque no, la tabella non dovrebbe avere indici.

    Per il momento l'unica query che è provato è stata del tipo che segue:

    codice:
    SELECT * from geoname WHERE asciiname like '$cityname'
    Il risultato sulle 2 - 3 query che son riuscito a provare è risultato 0.. Ma in linea di massima dovrebbe essere restituita una sola riga

    L'hardware non è il massimo ma neanche un pentium 2 con 64 MB, ho un i7 da 2.2 Ghz e 8 Gb di ram..
    Mess with the best die like the rest.

  8. #8
    Originariamente inviato da KingWoody
    Ma comunque no, la tabella non dovrebbe avere indici.
    quindi, come minimo, aggiungi gli indici sulle colonne che interroghi maggiormente, ne trarrai beneficio

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    154
    Grazie del suggerimento ma come ho detto purtroppo con MySQL sono alle prime armi, tu quali indici mi consiglieresti di aggiungere considerando che si tratta di una database di città e che la query della ricerca che effettuerò più frequentemente sarà quella indicata nel precedente post.

    Oltretutto io con questa ricerca alla fine dovrei fare uno script di autocomplete, ma considerando i tempi la vedo dura.. Secondo voi sarà mai possibile con un DB del genere fare ricerche in tempi utili per l'autocomplete? Dopotutto, lo so che non sarebbe un paragone da fare haha, però Google lo fa..
    Mess with the best die like the rest.

  10. #10
    scusa, ma cosa c'entra l'inesperienza? ti è stato detto di aggiungere indici sulle colonne che interroghi maggiormente, quindi se la tua query interroga la colonna asciiname (come da tuo esempio) metterai l'indice sulla colonna asciiname! non credo si debba avere anni di esperienza per capire questo


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.