5

私はかなり単純なテーブルを持っています(エラー/愚かさを許してください、私はまだ学んでいます.MySQL用に書かれています)

CREATE TABLE IF NOT EXISTS  `userdata` (
    `userid`    UNSIGNED int(18446744073709551615) AUTO_INCREMENT, 
    `username`  char(255) NOT NULL,
    `password`  char(255) NOT NULL,
    `salt`      char(255) NOT NULL,
    `email`     char(255) NOT NULL,

    PRIMARY KEY(`userid`)
);

データベース全体を調べる必要がないため、インデックスを追加するとクエリのパフォーマンスが向上することを読みました。代わりに、インデックスを調べてデータを照合します (間違っていたら訂正してください)。

インデックスを十分に作成する方法はわかりましたが、インデックスを作成する必要はありません。
ユーザー名にインデックスを付ける必要がありますか? メールアドレス、ユーザー ID、またはまだ追加していないフィールドはありますか?

4

5 に答える 5

6

キー付きルックアップを実行しているほとんどすべての列にインデックスが必要です。where userid = ?クエリの1つで何かが実行されますか?次に、にインデックスを付けuseridます。ルックアップを行う予定usernameですか?次に、ユーザー名にインデックスを付けます。どうpasswordですか?おそらくそうではないので、気にしないでください。

于 2011-01-03T22:31:54.580 に答える
5

列の実際の使用に基づいてのみインデックスを作成する必要があります

WHEREでの使用法:
がまったくない 場合、これらが多数ある場合WHERE username='xyz'はインデックスは必要ありません。次に、インデックスを追加します。

JOINでの使用法:
がまったくない 場合、これらが多数ある場合JOIN xxxx ON x.userid=u.useridはインデックスは必要ありません。次に、インデックスを追加します。

于 2011-01-03T22:36:13.187 に答える
3

どのフィールドを検索しますか?それらは、インデックスの最初の候補になるはずです。また、他のテーブルで外部キーになる列にインデックスを付けます(userid候補のようです)。

于 2011-01-03T22:31:50.717 に答える
0

PrimayIDはユーザーIDに移動する必要があります。これは、現在および長期的には非常に役立ちます。

于 2011-01-03T22:31:45.603 に答える