簡単な概要:
(私の意見だけ)
- メールアドレスの場合-
VARCHAR(255)
- ユーザー名の場合-
VARCHAR(100)
またはVARCHAR(255)
- id_usernameの場合-
INT
を使用します (システムで20億人を超えるユーザーを計画している場合を除く) - 電話番号-
INT
またはVARCHAR
または多分CHAR
(フォーマットを保存するかどうかによって異なります) - 投稿-
TEXT
- 日付-
DATE
またはDATETIME
(投稿やメールなどの時間を必ず含めてください) - お金-
DECIMAL(11,2)
- その他-以下を参照
VARCHAR
のため、InnoDBを使用する限り より速いはずです、私はそれについて心配しません、または一般的に速度。トランザクションを実行する必要がある場合や、データの整合性のために外部キー制約(FK)を使用する場合は、InnoDBを使用してください。また、InnoDBは行レベルのロックを使用しますが、MyISAMはテーブルレベルのロックのみを使用します。したがって、InnoDBは、MyISAMよりも高いレベルの同時実行性をより適切に処理できます。 MyISAMを使用して、フルテキストインデックスを使用し、オーバーヘッドをいくらか減らします。
エンジンタイプよりも速度にとって重要なのは、すばやく検索する必要のある列にインデックスを付けることです。前述のid_usernameなど、常にID/PK列にインデックスを付けてください。
詳細:
MySQLのデータ型とデータベース設計に関する一連の質問があります(警告、あなたが要求した以上のもの):
そして、InnoDBエンジンをいつ使用するかについてのいくつかの質問:
tinyint
を使用します ほとんどすべてのために(真剣に)。
編集-「投稿」を保存する方法:
以下に詳細のリンクをいくつか示しますが、ここに短いバージョンがあります。 「投稿」を保存するには、長いテキスト文字列用のスペースが必要です。 CHAR
最大長は255なので、これはオプションではありません。もちろん、CHAR
VARCHAR
に対して未使用の文字を無駄にします 、可変長のCHAR
。
MySQL 5.0.3より前では、VARCHAR
最大長は255だったので、TEXT
が残ります。 。ただし、MySQLの新しいバージョンでは、VARCHAR
を使用できます。 またはTEXT
。選択は好みに依存しますが、いくつかの違いがあります。 VARCHAR
およびTEXT
最大長は両方とも65,535になりましたが、VARCHAR
で独自の最大値を設定できます 。投稿は最大2000個で十分だと考えているとしましょう。VARCHAR(2000)
を設定できます。 。すべての制限に達した場合は、ALTER
後でテーブルを作成し、VARCHAR(3000)
にバンプします 。一方、TEXT
実際には、そのデータをBLOB
に格納します (1)。 VARCHAR
の間でパフォーマンスの違いがあると聞きました およびTEXT
、しかし私は証拠を見たことがないので、それをもっと調べたいと思うかもしれませんが、将来いつでもその小さな詳細を変更することができます。
さらに重要なのは、LIKE
の代わりにフルテキストインデックスを使用してこの「投稿」列を検索することです。 はるかに高速になります(2)。ただし、 InnoDBはMyISAMエンジンをサポートしていないため、フルテキストインデックスを使用するにはMyISAMエンジンを使用する必要があります 。 MySQLデータベースでは、テーブルごとにエンジンを異種混合することができるため、「投稿」テーブルでMyISAMを使用する必要があります。ただし、InnoDB(トランザクション用)を使用するために「投稿」がどうしても必要な場合は、トリガーを設定して「投稿」テーブルのMyISAMコピーを更新し、すべての全文検索にMyISAMコピーを使用します。
いくつかの有用な引用については、下部を参照してください。
最後に、VARCHARとTEXTの長所と短所についてのすばらしい投稿があります。また、パフォーマンスの問題についても説明しています。