いくつかの答え:
-
2,000万行はMySQLの機能の範囲内です。私は、テーブルの1つに5億を超える行があるデータベースで作業しています。テーブルの再構築には数時間かかる場合がありますが、インデックスによって支援されている限り、通常のクエリは問題になりません。
-
あなたのラップトップはかなり時代遅れであり、大規模なデータベースサーバーとして使用するには十分な能力がありません。テーブルの再構築には長い時間がかかります。メモリの量が少なく、通常はラップトップディスクが遅いことが、おそらく制約になっています。おそらく、非常に古いコンピューターで動作するように設計されたMySQLのデフォルト設定も使用しています。
-
TEXT
の使用はお勧めしません すべてのデータ型 桁。TEXT
が必要な理由はありません それらの列のほとんどについて。 -
特に
TEXT
の使用を主張する場合は、すべての列にインデックスを作成しないでください。 データ型。TEXT
にインデックスを付けることさえできません プレフィックスインデックスを定義しない限り、列 。一般に、特定のクエリをサポートするインデックスを選択します。
上記に基づいて他にも多くの質問があるかもしれませんが、1つのStackOverflow投稿でカバーするには多すぎます。データベースを使用する場合は、トレーニングを受けたり、本を読んだりすることをお勧めします。
高性能MySQL、第2版
。
フォローアップの質問について:
MySQLチューニングについては、ここから始めるのが良いでしょう: http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/
多くのALTERTABLE操作により、テーブルが再構築されます。つまり、基本的にテーブルをロックし、変更を適用してテーブル全体のコピーを作成し、新しいテーブルと古いテーブルの名前を変更して、古いテーブルを削除します。テーブルが非常に大きい場合、これには長い時間がかかる可能性があります。
TEXTデータ型は最大64KBを格納できますが、これは電話番号や州にとってはやり過ぎです。私は典型的な米国の電話番号にCHAR(10)を使用します。米国の州ではCHAR(2)を使用します。一般に、特定の列で必要なデータの範囲をサポートする最もコンパクトで節約的なデータ型を使用します。