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!
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.
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)
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
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.
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)
SSD=Solid State Disk? o è altro?Originariamente inviato da br1
... uso di SSD ...
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.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 )
Per il momento l'unica query che è provato è stata del tipo che segue:
Il risultato sulle 2 - 3 query che son riuscito a provare è risultato 0.. Ma in linea di massima dovrebbe essere restituita una sola rigacodice:SELECT * from geoname WHERE asciiname like '$cityname'
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.
quindi, come minimo, aggiungi gli indici sulle colonne che interroghi maggiormente, ne trarrai beneficioOriginariamente inviato da KingWoody
Ma comunque no, la tabella non dovrebbe avere indici.![]()
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.
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![]()
![]()
![]()
![]()