MySQL索引总结

例如:数据库中2万条记录,如果要执行一个查询,select * from table where num =1000,

如果没有建立索引,必须要遍历整个表,直到num=1000被找到为止,

如果在num这个列上设置索引,就不需要任何的扫描,直接在索引里面找到1000.

所以建立索引,能够提高数据库的查询速度

索引在存储引擎中实现,因此,每种存储引擎的索引都不一定完全相同,

并且每一种存储引擎也不一定支持所有索引类型.

MySQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关

MyISAM和InnoDB存储引擎只支持BTREE索引,

MEMORY/HEAP存储引擎可以支持HASH和BTREE索引


1.jpg

MySQL的索引分为以下几类:


2.jpg
2a.jpg

索引的设计原则:


1.jpg

创建索引


2.jpg

创建普通索引:

1.创表时创建索引

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)
)
2.创表之后,执行语句

show create table book
执行之后,可以看到book表的 year_publication 字段成功创建了索引,索引名称为year_publication 为MySQL自动添加

3.使用explain语句查看索引是否在使用:

explain select * from book where year_publication=1990
执行之后:

创建唯一索引:

创建唯一索引的原因是减少查询索引列操作的执行时间,和普通的索引相比,索引列的值必须是唯一,但允许有空值,

如果是组合索引,则列值的组合必须唯一

1.创建表

create table t1(
id int not null,
name char(30) not null,
unique index UniqIdx(id)
)
2.执行创建之后,进行查看表结构

show create table t1
可以看到已经创建了一个名为UniqIdx的唯一索引

创建单列索引

单列索引是在数据表中的某一个字段上创建的索引,一个表可以创建多个单列索引,上述两个索引的创建都是属于单列索引

1.执行创表

create table t2(
id int not null,
name char(50) null,
index SingleIdx(name(20))
)
2.执行结束后,查看表结构:

可以看到.已经创建了名为SingleIdx的单列索引,索引长度为20

创建组合索引:

在多个字段上创建一个索引

1.执行创表语句:

create table t3(
id int not null,
name char(30) not null,
age int not null,
info varchar(255),
index MultiIdx(id,name,age(100))
)
2.执行结束,进行查看表结构:

show create table t3
3.同样也能看出,id,name,age成功建立了名为MultiIdx的组合索引

创建全文索引:

FULLTEXT(全文索引)可以应用于全文搜索,只有MyISAM存储引擎支持FULLTEXT索引,

并且为CHAR,VARCHAR,TEXT列创建索引

1.创建表

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
2.查看表结构

show create table t4
可以看到已经创建了一个FullTxtIdx的索引

全文索引适合大型数据集,对于小的数据库来说,用处比较小

创建空间索引

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

1.创表

create table t5(
g GEOMETRY NOT NULL,
SPATIAL INDEX spatIdx(g)
)engine=MyISAM
2.查看表结构

show create table t5
可以看到,已经创建了名为spatIdx的空间索引

需要注意的是,创建指定空间类型字段值的非空约束.并且表的存储引擎为MyISAM

在已经存在的表创建索引
使用ALTER TABLE 语句创建索引

1.执行语句

alter table book add index BkName(bookname(30))
2.show index 查看表中索引

show index from book
可以看到新增了一个索引

创建唯一索引:

alter table book add index UniqiIdx(bookId)
创建单列索引:

alter table book add index BkcmtIdx(comment(50))
创建组合索引

alter table book add index BkAuandInfoIdx (authors(30),info(50))
创建全文索引:

alter table t6 add FULLTEXT infoFTIdx (info)
创建空间索引:

alter table t7 add spatial index spatIdx(g)

使用CREATE TABLE 语句创建索引

创建普通索引:

create index BkNameIdx on book(bookname)
创建唯一索引:

create unique index UniqIdx on book(bookId)
创建单列索引:

create index BKcmtIdx on book(comment(50))
创建组合索引:

create index BkAuAndInfoIdx on book(authors(20),info(50))
创建全文索引

create fulltext index on book (info)
创建空间索引:

create spatial index spatIdx on book(g)

删除索引

使用ALTER TABLE 语句删除索引

alter table 表名 drop index 索引名
使用DROP INDEX 语句删除索引

drop index 索引名 on 表名

你可能感兴趣的:(MySQL索引总结)