Mysql中key 、primary key 、unique key 与index区别

详细情况看:  https://www.cnblogs.com/zjfjava/p/6922494.html

 

索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。

表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。

如果一个表有1000行,这比顺序读取至少快100倍。注意你需要存取几乎所有1000行,它较快的顺序读取,因为此时我们避免磁盘寻道。 

所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。字符串是自动地压缩前缀和结尾空间。

 

CREATE TABLE `phpcolor_ad` ( 
`id` mediumint(8) NOT NULL AUTO_INCREMENT, 
`name` varchar(30) NOT NULL, 
`type` mediumint(1) NOT NULL, 
`code` text, 
PRIMARY KEY (`id`), 
KEY `type` (`type`) 
);

最后一句的KEY `type` (`type`)是什么意思?

如果只是key的话,就是普通索引

         mysql的key和index多少有点令人迷惑,单独的key和其它关键词结合的key(primary key)实际表示的意义是不同,这实际上考察对数据库体系结构的了解的。
1 :

key 是数据库的物理结构,它包含两层意义和作用,

一是约束(偏重于约束和规范数据库的结构完整性),

二是索引(辅助查询用的)。

包括primary key, unique key, foreign key 等。

primary key 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个主键索引;    

                          PRIMARY KEY 约束:唯一标识数据库表中的每条记录;

                                                                 主键必须包含唯一的值;

                                                                 主键列不能包含 NULL 值;

                                                                 每个表都应该有一个主键,并且每个表只能有一个主键。(PRIMARY KEY 拥有自动定义的 UNIQUE 约束)

unique key 也有两个作用,一是约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个唯一索引;

UNIQUE 约束:唯一标识数据库表中的每条记录。
                                                    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
                                                    (每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束)

foreign key 也有两个作用,一是约束作用(constraint),规范数据的引用完整性,但同时也在这个key上建立了一个index;

 

可见,mysql的key是同时具有constraint和index的意义,这点和其他数据库表现的可能有区别。

(至少在Oracle上建立外键,不会自动建立index),因此创建key也有如下几种方式:
(1)在字段级key方式建立, 如 create table t (id int not null primary key);
(2)在表级constraint方式建立,如create table t(id int, CONSTRAINT pk_t_id PRIMARY key (id));
(3)在表级key方式建立,如create table t(id int, primary key (id));

posted @ 2020-10-13 09:54  winner66  阅读(387)  评论(0)    收藏  举报