MySQL学习之索引

一、 索引简介

索引是对数据库表中一列/多列的值进行排序的一种结构,使用索引可提高数据库中特定的查询速度。

1、索引的含义和特点

1)索引是一个单独、存储在磁盘上的数据库结构包含着对数据表里所有记录的引用指针。使用索引用于快速找出某个或多个列中有一特定值的行

2)索引是在存储引擎中实现的,每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型MySQL索引存储类型有:BTREEHASH,具体和表的存储索引有关,MyISAMInnoDB存储引擎只支持BTREE索引MEMORY/HEAP存储索引可以支持HASHBTREE索引

3)索引的优点

a. 创建唯一索引,可以保证数据库中的每一行数据的唯一性

b. 大大加快了查询速度

c. 实现数据的参考完整性方面,可以加速表和表之间的连接

d. 使用分组和排序子句进行数据查询,显著减少查询时间

4缺点

a.创建/维护索引耗费时间,随着数据量的增加耗费时间也增加

b.索引需要占用磁盘空间

c.当对表中的数据进行增改删操作时也需要动态维护索引

 

2、索引的分类

1)普通索引:允许定义索引的列中插入空值+重复值

2)唯一索引:列值唯一,允许为空值。主键索引是一中特殊的唯一索引,不允许为空。

3)单列索引:索引中只有单个列,一个表中可以有多个单列索引

4)组合索引:、列值组合必须唯一,使用组合索引遵循最左前缀集合

5)全文索引:在定义索引的列上支持值得全文查找,允许为空值+重复值。可以用在char/varchar/text类型的列上。MySQL中只有MyISAM支持全文索引

6)空间索引:对空间数据类型字段创建的索引,MySQL空间数据类型有四种:geomety,point,linesting,polygon.使用spatial关键字进行扩展。创建空间索引的列必须为not null,只能在存储引擎为MyISAM的表上建立。

 

3、索引的设计原则

1)索引并不是越多越好

2)避免对经常更新的表进行过多的索引,并且索引中的列尽可能的少。

3)数据量小的表尽量不要使用索引

4)在条件表达式中经常用的不同列值较多的列上建立索引

5)当唯一性是某种数据本身的特征时指定唯一索引,保证数据的完整性。

6)在频繁进行排序或分组的列上建立索引,如果有多个建立组合索引。

 

 

二、创建索引

1、创建表时创建索引

Create table table_name [col_name data_type]

[unique|fulltext|spatial] [index|key] [index_name] (col_name[length]) [asc|desc]

 

[unique|fulltext|spatial]——分别表示三种索引

[index|key]——用于指定创建索引,两者作用一致

 [index_name]——指定索引名字

(col_name[length]) ——col_name为索引值,length为可选参数,表示索引的长度只有字符串类型的字段才能指定索引字段。

实例:

Create table book(

bookid int not null,

bookname varchar(255) not null,

authors varchar(255) not null,

info varchar(255) null,

comment varchar(255) null,

year_publication year not null,

index(year_publication)

);

explain语句来查看索引是否正在使用

Explain select * from book where year_publication=1990 \G

 

1)创建唯一索引:索引值唯一,允许为空,若为组合索引列值必须唯一。

Create table t1(

id int not null,

Name char(30) not null,

Unique index uniqIdx(id)

);

2)创建单列索引

Create table t2(

id int not null,

name char(50) null,

index SingleIdx(name(20))

);

 

3)创建组合索引

Create table t3(

id int not null,

name char(30) not null,

age int not null,

info varchar(255),

Index MultiIdx(id,name,age)

);

Show create table t3 \G

Explain select * from t3 where id=1 and name=’Joe’ \G

 

4)创建全文索引

全文索引用于全文搜索,只有MyISAM存储支持fulltext索引,且只为char/varchar/text三种类型创建索引,索引总是对整个列进行,不支持前缀索引。

Create table t4(

id int not null,

name char(30) not null,

age int not null,

info varchar(255),

Fulltext index fullTxtIdx(info)

)ENGINE=MyISAM;

5)创建空间索引

空间索引必须在MyISAM类型的表中创建,且空间类型字段必须为非空

Create table t5(

g geometry not null,

Spatial index spatIdx(g)

)engine=MyISAM;

2、在已经存在的表上创建索引

Alter table table_name add

[unique|fulltext|spatial] [index|key] [index_name] (col_name[length],……) [asc|desc]

 

Alter table book add index BkName(bookname(30));

Alter table book add unique index uniqueIdx(bookId);

Alter table book add index BkcmtIdx(comment(50));

Alter table book add index BkAuandInfoIdx(authors(30),info(50));

Create table t6(

id int not null,

info char(255)

)engine=MyISAM;

Alter table t6 add index infoFTIdx(info);

3、使用create index 创建索引

Create [unique|fulltext|spatial] index index_name

On table_name (col_name[length],……) [asc|desc]

 

三、删除索引

1、使用alter table 删除索引

Alter table table_name drop index index_name;

2、使用drop index语句删除索引

Drop index index_name on table_name;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值