0

I read somewhere that one should not create many indexes on the columns of a table for it reduces the performance of operations.

But when I create a table with UNIQUE NOT NULL fields, the MySQL is creating indexes on all the fields by itself. Doesn't that reduce the performance?? If yes, what flags I need to change the default behaviour? If not, then where I am wrong?

My Table:

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
);

When I see the table on 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在末尾创建一列时,这意味着您正在告诉 mysqlUNIQUE在该列上添加索引

因此,对于两个 UNIQUE 列,有两个索引。对于主键,有一个索引。共3个指标。userpass列没有索引。因为你没有告诉它。

如果您需要索引并且您知道为什么需要UNIQUE索引,那么只需添加它。不要考虑现在的表现。部署后,如果您遇到任何性能问题,请考虑优化。

于 2012-11-11T20:33:48.627 回答