数据库回顾(十) 数据库索引(上)

80 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情

大家好! 我是慕歌,一只想教你学习 后端技术的野生coder! 欢迎来到慕歌的数据库系列教程,希望通过这个教程带大家深入学习数据库技术,该教程所有知识点均来源于本人的日常学习与开发中,如有疑问请与我联系!

前言

在上一节的分享中,慕歌向大家分享关于数据库存储引擎的知识点,数据存储引擎是数据库功能实现的底层支撑,用于构建数据库表,建立数据库服务层与存储层的连接。与上一节主要分析的数据库服务层组合,实现复杂的数据的管理,优秀的数据存储引擎与数据存储结构,能够快速的建立数据访问,并检索到需要的数据。
MYSQL支持多个数据存储引擎,主流的存储引擎主要是INNOBD以及MYISM ,她们具有各自的数据存储结构,以及支持的数据特性,因而需要根据自己的数据特性,进行数据存储引擎的选择,才能最大化数据访问,执行效率。
以上是对数据存储引擎层的简单回顾,理解底层数据存储特性,那么这一节我们将学习数据存储中重要的结构,数据库索引。

索引

索引概述:

索引是对数据存储结构的一种称呼,通过索引我们能够快速的从数据表中检索所需要的数据,具有快速访问,快速构建的特点,具体性能由底层的数据结构来决定。

索引分类:

逻辑划分:普通索引,唯一索引,主键索引,全文索引
物理划分:聚簇索引,非聚簇索引
字段划分:单列索引,联合索引

索引创建:

#创建索引语法
CREATE TABLE table_name [col_name data_type] 
[UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name [length]) [ASC | DESC]
#UNIQUE 唯一索引 / FULLTEXT 全文索引 / SPATIAL 空间索引
#index 用于指定索引 / index_name 索引的名称
#col_name[] 指定索引的列,字符串列可指定长度
#ASC 生成升序索引/降序索引

#示例:
#简单索引
CREATE TABLE book( 
    book_id INT , 
    book_name VARCHAR(100), 
    year_publication YEAR, 
    INDEX(year_publication) 
);

#唯一索引
CREATE TABLE test1( 
    id INT NOT NULL, 
    name varchar(30) NOT NULL, 
    UNIQUE INDEX uk_idx_id(id) 
);

#主键索引
CREATE TABLE student ( 
    id INT(10) UNSIGNED AUTO_INCREMENT, 
    student_no VARCHAR(200),
    student_name VARCHAR(200), 
    PRIMARY KEY(id) 
);

# 删除主键索引
ALTER TABLE student drop PRIMARY KEY ;

主键索引是一个表中必须具有的索引,当没有主键是,数据表会寻找合适的字段进行构建主键索引。主键索引与唯一索引依赖于之前的约束存在,当索引失效的时候约束也会失效。

索引更新:

#索引更新
ALTER TABLE table_name 
ADD [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name[length],...) [ASC | DESC]

#删除索引
DROP INDEX index_name ON table_name;

#隐藏索引
CREATE INDEX indexname 
ON tablename(propname[(length)]) INVISIBLE;

 #切换成隐藏索引 
ALTER TABLE tablename ALTER INDEX index_name INVISIBLE;

 #切换成非隐藏索引
ALTER TABLE tablename ALTER INDEX index_name VISIBLE;

隐藏索引的状态可根据需求进行采用,在某些情况下需要屏蔽索引,测试数据库的性能,就可将部分索引设置为隐藏索引,测试隐藏之后的性能,进行对比分析。

结语

这一节的分享到这里就结束了,下一节将带来数据库索引具体细节的分享学习!
如果您觉得本文不错,欢迎点赞支持,您的关注是我坚持的动力!