Några svar:
-
20 miljoner rader är väl inom kapaciteten för MySQL. Jag arbetar på en databas som har över 500 miljoner rader i en av sina tabeller. Det kan ta timmar att omstrukturera en tabell, men vanliga frågor är inga problem så länge de får hjälp av ett index.
-
Din bärbara dator är ganska föråldrad och underdriven att använda som en högskalig databasserver. Det kommer att ta lång tid att göra en tabellomstrukturering. Den låga mängden minne och vanligtvis långsam bärbar disk begränsar dig förmodligen. Du använder förmodligen standardinställningar för MySQL också, som är designade för att fungera på mycket gamla datorer.
-
Jag skulle inte rekommendera att använda
TEXT
datatyp för alla kolumn. Det finns ingen anledning till att du behöverTEXT
för de flesta av dessa kolumner. -
Skapa inte ett index för varje kolumn, särskilt om du insisterar på att använda
TEXT
datatyper. Du kan inte ens indexera enTEXT
kolumn om du inte definierar ett prefixindex . I allmänhet väljer du index för att stödja specifika frågor.
Du har förmodligen många andra frågor baserat på ovanstående, men det finns för mycket att täcka i ett enda StackOverflow-inlägg. Du kanske vill ta utbildning eller läsa en bok om du ska arbeta med databaser.
Jag rekommenderar High Performance MySQL, 2nd Edition
.
Angående dina följdfrågor:
För MySQL-inställning, här är ett bra ställe att börja:http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/
Många ALTER TABLE-operationer orsakar en tabellomstrukturering, vilket i princip innebär att låsa tabellen, göra en kopia av hela tabellen med ändringarna som tillämpas, och sedan byta namn på de nya och gamla tabellerna och släppa den gamla tabellen. Om bordet är väldigt stort kan detta ta lång tid.
En TEXT-datatyp kan lagra upp till 64KB, vilket är överdrivet för ett telefonnummer eller en stat. Jag skulle använda CHAR(10) för ett typiskt amerikanskt telefonnummer. Jag skulle använda CHAR(2) för en amerikansk stat. Använd i allmänhet den mest kompakta och sparsamma datatypen som stöder den mängd data du behöver i en viss kolumn.