【如何成为SQL高手】第三关:索引及维护

简介: 【如何成为SQL高手】第三关:索引及维护

1.索引的创建



1.1. 普通索引


按照下图的表结构创建tb_student1表,要求在创建的同时在studentName字段上建立普通索引,

索引名为idx_studentName


e6fa90feda254f55a1d0b9e2ba8da0f0.png

create table if not exists tb_student1 (
studentNo CHAR(10) not NULL primary key comment '学号',
studentName VARCHAR(10) NOT null comment '姓名',
sex CHAR(2) comment '性别',
birthday date comment '出生日期',
native VARCHAR(20) comment '籍贯',
nation VARCHAR(10) DEFAULT '汉' comment '民族',
classNo CHAR(6) comment '所属班级',
INDEX idx_studentName(studentName)
) ENGINE=InnoDB comment '学生表';
注:INDEX idx_studentName(studentName)这个是关键
此方法是创建新表的同时创建普通索引

1.2. 唯一索引


按照下图的表结构创建tb_class1表,要求在创建的同时在className字段上建立唯一索引,

索引名为uqidx_className

bea87fb8758c46bb88d48fd0a2aac6e8.png

CREATE TABLE tb_class1 (
 classNo CHAR(6) PRIMARY KEY NOT NULL,
 className VARCHAR(20) NOT NULL,
 department VARCHAR(20),
 grade ENUM('1','2','3','4'), 
 classNum TINYINT,
 constraint uq_class unique(className),
 UNIQUE INDEX uqidx_className(className)
) engine=InnoDB default charset=gb2312;
注: UNIQUE INDEX uqidx_className(className)是关键
此方法是创建新表时创建唯一索引

f48e3e92626c430283d00e4ae99bc570.png


1.3. 主键索引


按照如下的表结构创建tb_course1,要求创建的同时在courseNo字段上建立主键索引


6e691b0901094490ab7c644a0a498b28.png

CREATE TABLE tb_course1 (
 courseNo CHAR(6) primary key comment '课程号',
 courseName VARCHAR(20) unique not NULL comment '课程名',
 credit DECIMAL(3,1) not NULL comment '学分',
 courseHour TINYINT(2) not NULL comment '课时数', 
 term TINYINT(2) comment '开课学期',
 priorCourse CHAR(6) comment '先修课程'
) engine=InnoDB default charset=gb2312;
注: courseNo CHAR(6) primary key comment '课程号' 是关键
次方法是在创建新表的同时创建主键索引

7fc43f9af602484ab080b03ef12a3c18.png


1.4. 升序降序索引


按照如下表结构创建tb_score1,

要求使用create index 语句对studentNo建立普通降序索引,索引名为idx_studentNo,

对courseNo建立普通升序索引,索引名为idx_courseNo.



CREATE TABLE tb_score1(
 studentNo CHAR(10) NOT NULL comment '学号',
 courseNo CHAR(6) NOT NULL comment '课程号',
 credit DECIMAL(4,1) not NULL comment '成绩'
) engine=InnoDB default charset=gb2312;
alter table tb_score1 add index idx_studentNo(studentNo desc);
alter table tb_score1 add index idx_courseNo(courseNo);

image.png


使用create index语句创建基于字段值前缀字符的索引

在tb_course上建立一个索引,要求按课程名称courseName字段值的前三个字符建立降序索引。

–函数要再加个括号

alter table tb_course add index idx_courseName1((left(courseName,3)) desc);

DROP INDEX idx_courseName1 on tb_course;


使用alter table语句建立普通索引:在tb_score上建立普通索引

要求使用alter table语句对courseNo字段建立普通索引,索引名为idx_courseNo.

alter table tb_score add index idx_courseNo(courseNo);


2.索引的维护



2.1 查看索引


使用show index from tb_student1 \G;

查看tb_student表的索引,显示内容中主要参数说明:

Table: 指明索引所在表的名字。

Non_unique: 该索引是不是唯一索引,如果是唯一索引,该值为0;如果不是唯一索引,该值为1.

Key_name: 索引的名字。如果在创建索引语句里使用了primary key关键字,且没有明确给出索引名,则系统会为其指定一个索引名PRIMARY。

Column_name: 建立索引的列名称.

Collation: A表示升序;NULL表示没有排序。

image.png


2.2 删除普通索引


删除tb_student1表中idx_studentName索引

DROP INDEX idx_studentName on tb_student1;

image.png


2.3 删除主键索引


删除在表tb_student中定义的主键约束

Alter table tb_student drop primary key;

添加主键约束,用alter table语句在tb_student对studentNo重新添加主键。

Alter table tb_student add primary key(studentNo);


3.技能拓展



3.1 索引介绍


基于InnoDB,数据结构都是B+树,特点是:
主键索引存储的是Mysql整个数据行
普通索引存储的是索引列和主键的值
Mysql 8.0.13版本及以上已经出现了函数索引


3.2 索引的创建原则


a.出现Where子句中的列(
目录
相关文章
|
3月前
|
SQL 存储 关系型数据库
如何巧用索引优化SQL语句性能?
本文从索引角度探讨了如何优化MySQL中的SQL语句性能。首先介绍了如何通过查看执行时间和执行计划定位慢SQL,并详细解析了EXPLAIN命令的各个字段含义。接着讲解了索引优化的关键点,包括聚簇索引、索引覆盖、联合索引及最左前缀原则等。最后,通过具体示例展示了索引如何提升查询速度,并提供了三层B+树的存储容量计算方法。通过这些技巧,可以帮助开发者有效提升数据库查询效率。
224 2
|
3月前
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
|
4月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
680 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
3月前
|
SQL 关系型数据库 MySQL
如何确认SQL用了索引:详细技巧与方法
在数据库管理中,索引是提高SQL查询性能的重要手段
|
4月前
|
SQL 存储 索引
SQL Server的Descending Indexes降序索引
【9月更文挑战第21天】在SQL Server中,降序索引允许指定列的排序顺序为降序,可显著优化涉及降序排序的查询性能,特别是在复合索引中。通过创建降序索引,可以更高效地满足特定业务需求,如按交易时间降序获取最新记录。然而,使用时需考虑查询频率、数据分布及维护成本,以确保最佳性能。
|
3月前
|
SQL 存储 关系型数据库
SQL默认索引是什么:深入解析与技巧
在SQL数据库中,索引是一种用于提高查询性能的重要数据结构
|
3月前
|
SQL 存储 关系型数据库
SQL默认索引是什么
在SQL数据库中,索引是一种用于提高查询性能的数据结构
|
3月前
|
SQL 关系型数据库 MySQL
如何确认SQL用了索引
在数据库管理和优化过程中,确认SQL查询是否使用了索引是一个至关重要的步骤
|
3月前
|
SQL 关系型数据库 MySQL
如何确认SQL查询是否使用了索引:详细步骤与技巧
在数据库管理和优化中,确认SQL查询是否有效利用了索引是提升性能的关键步骤
|
3月前
|
索引
SQL_创建和管理索引
SQL_创建和管理索引
32 0