mysql 普通索引 唯一索引的创建与效率比较

unique(唯一索引)

alter table `table_name` add unique (`column`)

index(普通索引)
mysql教程>alter table `table_name` add index index_name (
`column` )

fulltext(全文索引)
alter table `table_name` add fulltext ( `column` )

 

1、普通索引

  普通索引(由关键字key或index定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(wherecolumn=)或排序条件(orderbycolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。

一个文章库,里面有两个表:category和article。category里面有10条分类数据。article里面有20万条。article里面有一个”article_category”字段是与category里的”category_id”字段相对应的。article表里面已经把
article_category字义为了索引。数据库教程大小为1.3g。

问题描述:

执行一个很普通的查询: select * from `article` where
article_category=11 order by article_id desc limit 5
。执行时间大约要5秒左右

解决方案:

建一个索引:create index idx_u on article
(article_category,article_id);

select * from `article` where article_category=11 order by
article_id desc limit 5 减少到0.0027秒

2、唯一索引

  普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。

如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字unique把它定义为一个唯一索引。这么做的好处:一是简化了mysql对这个索引的管理工作,这个索引也因此而变得更有效率;二是mysql会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,mysql将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

create table persons
(
id_p int not null,
lastname varchar(255) not null,
firstname varchar(255),
address varchar(255),
city varchar(255),
constraint uc_personid unique (id_p,lastname)
)

如需撤销 unique 约束,请使用下面的 sql:

mysql:
alter table persons
drop index uc_personid

 

唯一索引。
它与前面的”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
(1)创建索引:create unique index indexname on
tablename(tablecolumns(length))
(2)修改表结构:alter tablename add unique [indexname] on
(tablecolumns(length))
(3)创建表的时候直接指定:create table tablename ( […], unique
[indexname] (tablecolumns(length));

 

) alter table `table_name` add
unique (`column`) index(普通索引) mysql教程alter table `table_name`
add index index_name ( `column` ) fulltext(全文索引)…

相关文章