sql >> データベース >  >> RDS >> Mysql

列に最適化されたデータ型を選択する方法[innodb固有]?

    簡単な概要:

    (私の意見だけ)

    1. メールアドレスの場合-VARCHAR(255)
    2. ユーザー名の場合-VARCHAR(100) またはVARCHAR(255)
    3. id_usernameの場合-INTを使用します (システムで20億人を超えるユーザーを計画している場合を除く)
    4. 電話番号-INT またはVARCHAR または多分CHAR (フォーマットを保存するかどうかによって異なります)
    5. 投稿-TEXT
    6. 日付-DATE またはDATETIME (投稿やメールなどの時間を必ず含めてください)
    7. お金-DECIMAL(11,2)
    8. その他-以下を参照

    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の長所と短所についてのすばらしい投稿があります。また、パフォーマンスの問題についても説明しています。



    1. MySQLフルテキストハッシュタグの検索(インデックスの#記号を含む)

    2. MySQLでオンラインショッピングカートのデータベースを設計するためのガイド

    3. SQLServerデータベースのバージョン管理

    4. 列dbo、ユーザー定義関数、または集計dbo.Splitfnが見つからないか、名前があいまいです