索引

5.1 索引简介

5.1.1 索引的含义和特点

索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。
索引的优点。
索引的缺点。

5.1.2 索引的分类

普通索引和唯一索引
单列索引和组合索引
全文索引
空间索引

5.1.3 索引的设计原则

索引并非越多越好。
避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。
数据量小的表最好不要使用索引。
在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。
当唯一性是某种数据本身的特征时,指定唯一索引。
在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引

5.2 创建索引

5.2.1 创建表的时候创建索引

创建表时创建索引的基本语法格式如下:
CREATE TABLE
table_name [col_name data_type] [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY]
[index_name] (col_name [length])
[ASC | DESC]

就是 在创建的语句之后或者最下方加上 index[字段名]

总的举例

使用关键字UNIQUE创建唯一索引
在最后加上 
UNIQUE INDEX UniqIdx(id也就是字段名)
单列索引是
INDEX SingleIdx(name(20)) # 20表示索引长度
组合索引
INDEX MultiIdx(id,name,age)
创建全文索引
FULLTEXT INDEX FullTxtIdx(info) # info属性是varchar
创建空间索引
空间索引必须在MyISAM类型的表中创建,且空间类型的字段必须为非空

5.2.2 在已经存在的表上创建索引

1.使用ALTER TABLE语句创建索引

在字段上添加索引
ALTER TABLE 表名 ADD INDEX BkNameIdx(bookname(30)) # BkNameIdx索引名
建立唯一索引加个UNIQUE
ALTER TABLE 表名 ADD UNIQUE INDEX BkNameIdx(bookname(30))
建立单列索引
ALTER TABLE 表名 ADD INDEX BkNameIdx(bookname(30))
建立组合索引
ALTER TABLE 表名 ADD INDEX BkNameIdx(bookname(30),authors(30))
建立全文索引
ALTER TABLE 表名 ADD  FULLTEXT INDEX BkNameIdx(bookname)
建立空间索引
ALTER TABLE 表名 ADD SPATIAL INDEX spatIdx(g) # 这个g表示字段

2.使用CREATE INDEX创建索引

建立普通索引
CREATE INDEX BIx ON 表名(字段名)
建立唯一索引
CREATE UNIQUE INDEX BIx ON 表名(字段名)
组合索引
CREATE UNIQUE INDEX BIx ON 表名(字段名1,字段名2)
全文索引
CREATE FULLTEXT INDEX BIx ON 表名(字段名)
空间索引
CREATE SPATIAL INDEX BIx ON 表名(字段名)

5.3 删除索引

1.使用ALTER TABLE删除索引
ALTER TABLE table_name
DROP INDEX index_name;

ALTER TABLE 表名 
	DROP INDEX 索引名;

2.使用DROP INDEX语句删除索引
DROP INDEX index_name ON table_name

5.4 MySQL 8.0的新特性1——支持降序索引

在MySQL 8.0之前,MySQL在语法上已经支持降序索引,但实际上创建的仍然是升序索引。
在MySQL 8.0版本中,已经开始支持降序索引。

5.5 MySQL 8.0的新特性2——统计直方图

数据库中,查询优化器负责将SQL转换成最有效的执行计划。有时候,查询优化器会找不到最优的执行计划,导致花费了更多不必要的时间。造成这种情况的主要原因是,查询优化器有时无法准确的知道以下几个问题的答案:
(1) 每个表有多少行?
(2) 每一列有多少不同的值?
(3) 每一列的数据分布情况?

5.6 综合案例——创建索引

笔记:MySQL8 从零开始学

posted @ 2021-09-19 20:40  索匣  阅读(95)  评论(0编辑  收藏  举报