MySQL索引总结以及执行索引语句

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

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

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

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

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

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

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

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

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


MySQL的索引分为以下几类:

索引的设计原则:


创建索引

创建普通索引:

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 表名

才疏学浅,只能总结到这些基础的,欢迎交流

猜你喜欢

转载自blog.csdn.net/zhangzeshan/article/details/84304190