MySQL笔记——索引

索引:提高数据库的性能,索引是物美价廉的东西了

 

常见索引:

  • 主键索引

  • 唯一索引

  • 普通索引

  • 全文索引——解决中子文索引问题

 

添加索引后索引会形成一颗二叉树,查找的时候用二分查找的思想

 

索引说明

  • 占用磁盘空间

  • 当添加一条记录,除了添加到表中,还要维护二叉树,速度有影响,但不大

  • 添加一个索引之后,不能够解决所有查询问题,需要分别给字段建立索引

  • 索引是以空间换时间

 

创建索引

 

主键索引

1.

-- 在创建表的时候,直接在字段名后指定 

primary key create table  user1(id int primary key, name varchar(30));

 

2.

-- 在创建表的最后,指定某列或某几列为主键索引 

create table  user2(id int, name varchar(30), primary key(id));

3.

create table  user3(id int, name varchar(30)); 

-- 创建表以后再添加主键 

alter table user3 add primary key(id);

 

主键索引的特点:

  • 一个表中,最多有一个主键索引,当然可以使符合主键

  • 主键索引的效率高(主键不可重复)

  • 创建主键索引的列,值不能为null,且不能重复

  • 主键索引的列基本上是int

 

 

唯一索引

1.

-- 在表定义时,在某列后直接指定unique唯一属性。 

create table user4(id int primary key, name varchar(30) unique);

 

2.

-- 创建表时,在表的后面指定某列或某几列为unique 

create table user5(id int primary key, name varchar(30), unique(name));

 

3.

create table user6(id int primary key, name varchar(30));

alter table user6 add unique(name);

 

唯一索引的特点

  • 一个表中可以有多个唯一索引

  • 查询效率高

  • 如果在某一列建立唯一索引,必须保证这列不能有重复数据

  • 如果一个唯一索引上指定not null,等价于主键索引

 

 

普通索引

 

1.

create table user8(id int primary key,

     name varchar(20),

     email varchar(30),

     index(name) --在表的定义最后,指定某列为索引 

);

 

 

2.

create table user9(id int primary key,

    name varchar(20),

    email varchar(30)); 

    alter table user9 add index(name); --创建完表以后指定某列为普通索引

3.

create table user10(id int primary key,  

    name varchar(20),  

    email varchar(30)); 

-- 创建一个索引名为 idx_name 的索引    

create index idx_name on user10(name);

 

普通索引的特点

  • 一个表中可以有多个普通索引,普通索引在实际开发中使用的比较多

  • 如果某列需要创建索引且还有重复值,那么就可以创建普通索引

 

 

全文索引

当对文章字段或有大量文字的字段进行检索时,会使用到全文索引

MySQL提供全文索引机制,但是有要求,要求表的存储引擎必须是MyISAM,且仅支持英文

 

查询索引

show keys from table_name



show index for table_name



desc table_name

 

删除索引

1.删除主键索引

alter table table_name drop primary key;



2.其他索引的删除

alter table table_name drop index index_name



3.

drop index index_name on table_name

 

 

索引的创建规则

  • 比较频繁作为查询条件的字段应该创建索引

  • 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

  • 更新非常频繁的字段不适合创建索引

  • 不会出现在where中的字段不应该创建索引

你可能感兴趣的:(MySQL)