MySQL数据库——索引(转)

1. 索引作用:

索引:提高数据库的查询速度的东西。
索引不用加内存,不用改程序,不用调sql,只要执行正确的create index ,查询速度就可能提高成百上千倍。
但是,是用一定代价换来的,查询速度的提高是以插入,更新,删除的速度为代价的,这些写操作,增加了大量的IO。

2. 创建索引

2.1 主键索引

2.1.1 创建主键索引的方式:

(1) 创建表的时候,直接在字段名后面指定primary key

create table student(id int primary key,name varchar(32));

(2) 在创建表的最后,指定某列或者几列为主键索引

create table student(id int,name varchar(32),primary key(id));

(3) 创建完表之后再添加

create table student(id int,nanme varchar(32));
alter table student add primary key(id);

2.1.2 主键索引的特点:

  1. 一个表中,最多有一个主键索引,当然可以使符合主键
  2. 主键索引的效率高(主键不可重复)
  3. 创建主键索引的列,它的值不能为null,且不能重复
  4. 主键索引的列基本上是int

2.2 唯一索引

2.2.1 创建唯一索引的方式

(1) 创建表的时候,直接在字段名后面指定为unique key

create table student(id int primary,name varchar(32) unique key);

(2) 在创建表的最后,指定某列或者几列为唯一键

create table student(id int primary ky,name varchar(32),unique key(name));

(3) 创建完表之后,添加唯一键

create table student(id int primary key,name varchar(32));
alter table student add unique key(name);

2.2.2 唯一索引的特点

1、一个表中,可以有多个唯一索引
2、查询效率高
3、如果在某一列建立唯一索引,必须保证这列不能有重复数据
4、如果一个唯一索引上指定not null,等价于主键索引

2.3 普通索引

2.3.1 创建普通索引的方式

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

create table user(ia int primary key,name varchar(32),email varchar(32),index(name));

(2) 创建完之后添加某列为普通索引

create table user(id int primary key,name varchar(32),email varchar(32));
alter table user add index(name);

(3) 创建一个索引名为idx_name 的索引

creat table student(id int primary key,name varchar(32),email varchar(32));
create index idx_name on user(name);

2.3.2 普通索引的特点

一个表中可以有多个普通索引,普通索引在实际开发中用的比较多
如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

2.4 全文索引

当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。MySQL提供全文索引机制,但是有要求,要求 表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。如果对中文进行全文检索,可以使用 sphinx的中文版(coreseek)。

2.4.1 全文索引的创建

(1) 在创建表的最后创建

create table articles(id int primary key,title varchar(200),body text,fulltext(title,body));

(2) 创建完表之后创建

create table articles(id int primary key,title varchar(200),body text);
alter table articles add fulltext(title,body);

注:如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高。

3. 索引创建原则

索引创建的原则

  1. 比较频繁作为查询条件的字段应该创建索引
  2. 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
  3. 更新非常频繁的字段不适合作创建索引
  4. 不会出现在where子句中的字段不该创建索引
-------------本文结束感谢您的阅读-------------