MYSQL学习笔记八(索引)

一、索引概念
1.1 概念
在MySQL中,索引的关键字为index也叫做“键(key),是存储引擎用于快速找到记录的一种数据结构。
当表中的数据量越来越大时,索引对于良好的性能非常关键。索引优化应该是对查询性能优化最有效的手段,创建一个真正最优的索引经常需要重写SQL查询语句。
注意:索引一般创建在经常的查询的字段上。

1.2 索引的工作原理
要理解MySQL中索引的工作原理,最简单的方法就是去看一看一本书的索引部分:比如你想在一本书中寻找某个主题,一般会先看书的索引目录,找到对应的章节、对应的页码后就可以快速找到你想看的内容。

在MySQL中,存储引擎用类似的方法使用索引,其先在索引中查找对应的值,然后根据匹配的索引记录找到对应的数据行,最后将数据结果集返回给客户端。

1.3 索引的类型
mysql索引的基础类型有四种,分别是主键索引、唯一索引、普通索引和全文索引。
主键索引:
主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。
唯一索引:
索引列的所有值都只能出现一次,即必须唯一,值可以为空。
普通索引 :
基本的索引类型,值可以为空,没有唯一性的限制。
全文索引:
全文索引的索引类型为FULLTEXT。全文索引可以在varchar、char、text类型的列上创建。可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。MyISAM支持全文索引,InnoDB在mysql5.6之后支持了全文索引。
全文索引不支持中文需要借sphinx(coreseek)或迅搜<、code>技术处理中文。

二、索引创建
#创建测试表,创建表的脚本如下:
CREATE TABLE data1
(
ID INT,
studentNumber NVARCHAR(30),
subjectName NVARCHAR(30),
score INT
)
1
2
3
4
5
6
7
8
2.1 创建主键索引
创建主键索引的语法结构如下:

ALTER TABLE table_name ADD PRIMARY KEY ( column )
1
eg:为data1创建列为ID的主键索引,脚本语句如下:

ALTER TABLE data1 ADD PRIMARY KEY (ID)
1
2.2 创建唯一索引
创建唯一索引的语法结构如下:

ALTER TABLE table_name ADD UNIQUE (
column`
)

eg:为data1创建列为studentNumber的唯一索引,脚本语句如下:

ALTER TABLE data1 ADD UNIQUE (
studentNumber
)

2.3 创建普通索引
创建普通索引的语法结构如下:

ALTER TABLE table_name ADD INDEX index_name ( column )
1
eg:为data1创建列为subjectName 的普通索引,脚本语句如下:

ALTER TABLE data1 ADD INDEX index_name (subjectName)
1
2.4 创建全文索引
创建全文索引的语法结构如下:

ALTER TABLE table_name ADD FULLTEXT ( column)
1
eg:为data1创建列为subjectName 的全文索引,脚本语句如下:

ALTER TABLE data1 ADD FULLTEXT INDEX fulltext_123(studentNumber,subjectName);
1
注意,执行上述脚本时候,有时候会出现如下错误信息:
MYSQL学习笔记八(索引)
报此错误是因为不支持全文索引,解决办法:

1、查看创建表时用的哪种引擎,如果是InnoDB,改为MyISAM,InnoDB不支持FULLTEXT类型的索引
2、查看配置文件mysql.ini,搜索default-storage-engine= ,如果是InnoDB,改为MyISAM。重启MySQL服务。

三、索引查看
索引查询有两种方式,分别如下:

方法一:
show index from tblname;
MYSQL学习笔记八(索引)
方法二:
show keys from tblname;
MYSQL学习笔记八(索引)
四、索引删除
可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。

DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY

猜你喜欢

转载自blog.51cto.com/14525650/2436589