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)); |
2.1.2 主键索引的特点:
- 一个表中,最多有一个主键索引,当然可以使符合主键
- 主键索引的效率高(主键不可重复)
- 创建主键索引的列,它的值不能为null,且不能重复
- 主键索引的列基本上是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)); |
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)); |
(3) 创建一个索引名为idx_name 的索引
creat table student(id int primary key,name varchar(32),email varchar(32)); |
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); |
注:如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高。
3. 索引创建原则
索引创建的原则:
- 比较频繁作为查询条件的字段应该创建索引
- 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
- 更新非常频繁的字段不适合作创建索引
- 不会出现在where子句中的字段不该创建索引