0

どこかで、テーブルの列に多くのインデックスを作成するべきではないことを読みました。これは、操作のパフォーマンスを低下させるためです。

しかし、UNIQUE NOT NULLフィールドを使用してテーブルを作成すると、MySQLはそれ自体ですべてのフィールドにインデックスを作成します。パフォーマンスが低下しませんか?はいの場合、デフォルトの動作を変更するために必要なフラグは何ですか?そうでない場合、私はどこが間違っていますか?

私のテーブル:

CREATE TABLE Users(
Id_usr INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(Id_usr),
Email_id varchar(45) UNIQUE NOT NULL,
username varchar(30) UNIQUE NOT NULL,
userpass varchar(30) NOT NULL
);

phpmyadminのテーブルを見ると:

Indexes: Documentation
Action  Keyname Type    Unique  Packed  Column  Cardinality Collation   Null    Comment
Edit Edit   Drop Drop   PRIMARY BTREE   Yes No  Id_usr  0   A       
Edit Edit   Drop Drop   Email_id    BTREE   Yes No  Email_id    0   A       
Edit Edit   Drop Drop   username    BTREE   Yes No  username    0   A       
4

2 に答える 2

1

パフォーマンスの低下は、書き込み中にインデックスを更新する必要があるためです。一方、インデックスは選択を高速化するために作成されます。

MySQLインデックスを作成したり、挿入または更新のたびにテーブル全体をスキャンしたりしない限り、一意性を強制する方法はありませんこれにより、パフォーマンスへの影響が大幅に悪化します。幸いなことに、その動作を変更することはできません。

于 2012-11-11T20:33:47.090 に答える
1

しかし、UNIQUE NOT NULLフィールドを使用してテーブルを作成すると、MySQLはそれ自体ですべてのフィールドにインデックスを作成します。

いいえ、Mysqlはあなたが指示したフィールドのみにインデックスを作成しています。最後に列を作成すると、その列にインデックスUNIQUEを追加するようにmysqlに指示していることを意味UNIQUEします。

したがって、2つのUNIQUE列には、2つのインデックスがあります。そして、主キーには1つのインデックスがあります。合計3つのインデックス。userpass列にインデックスがありません。あなたがそれを言わなかったので。

インデックスが必要で、なぜインデックスが必要なのかがわかっている場合はUNIQUE、それを追加するだけです。今はパフォーマンスについて考えないでください。デプロイ後、パフォーマンスの問題が発生した場合は、最適化について検討してください。

于 2012-11-11T20:33:48.627 に答える