Alcune risposte:
-
20 milioni di righe rientrano nelle capacità di MySQL. Lavoro su un database che ha oltre 500 milioni di righe in una delle sue tabelle. La ristrutturazione di una tabella può richiedere ore, ma le query ordinarie non sono un problema purché siano assistite da un indice.
-
Il tuo laptop è piuttosto obsoleto e sottodimensionato per essere utilizzato come server di database su larga scala. Ci vorrà molto tempo per fare una ristrutturazione del tavolo. La bassa quantità di memoria e il disco portatile in genere lento ti stanno probabilmente vincolando. Probabilmente stai usando anche le impostazioni predefinite per MySQL, che sono progettate per funzionare su computer molto vecchi.
-
Non consiglierei di usare
TEXT
tipo di dati per ogni colonna. Non c'è motivo per cui hai bisogno diTEXT
per la maggior parte di queste colonne. -
Non creare un indice su ogni colonna, specialmente se insisti nell'usare
TEXT
tipi di dati. Non puoi nemmeno indicizzare unTEXT
colonna a meno che tu non definisca un indice di prefisso . In generale, scegli gli indici per supportare query specifiche.
Probabilmente hai molte altre domande basate su quanto sopra, ma c'è troppo da coprire in un singolo post di StackOverflow. Potresti voler seguire un corso di formazione o leggere un libro se intendi lavorare con i database.
Raccomando MySQL ad alte prestazioni, 2a edizione
.
Per le tue domande di follow-up:
Per l'ottimizzazione di MySQL, ecco un buon punto di partenza:http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/
Molte operazioni di ALTER TABLE causano una ristrutturazione della tabella, il che significa sostanzialmente bloccare la tabella, fare una copia dell'intera tabella con le modifiche applicate, quindi rinominare la nuova e la vecchia tabella ed eliminare la vecchia tabella. Se il tavolo è molto grande, l'operazione può richiedere molto tempo.
Un tipo di dati TEXT può memorizzare fino a 64 KB, il che è eccessivo per un numero di telefono o uno stato. Userei CHAR(10) per un tipico numero di telefono degli Stati Uniti. Userei CHAR(2) per uno stato degli Stati Uniti. In generale, utilizza il tipo di dati più compatto e parsimonioso che supporta l'intervallo di dati di cui hai bisogno in una determinata colonna.