头歌实训之索引

 

🌟 各位看官好,我是maomi_9526

🌍 种一棵树最好是十年前,其次是现在!

🚀 今天来学习C语言的相关知识。

👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦

目录

第1关:创建一般索引

第2关:删除索引-练习

第3关:创建联合索引

第4关:创建唯一索引

第5关:创建前缀索引


第1关:创建一般索引

任务描述
本关任务:为 student 表按姓名升序建立索引,索引名为 idx_sname。

相关知识
为了完成本关任务,你需要掌握:

  1. 索引是什么;
  2. 索引的分类;
  3. 索引的创建和删除;
  4. 查询索引。

索引是什么
数据库索引是一种提高数据库系统性能的方法。索引能让数据库服务器更快地查找和获取表中指定的行。

例如,为了方便读者快速查找书中的术语,很多书籍在最后附加了索引页,术语按字母排序,同时给出页码。这样读者可以根据术语名,快速获取页码,而不用翻阅整本书。

但是索引也给数据库系统带来了一定的开销,所以我们应该谨慎地使用它们。

索引的分类
索引大体可分为单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引四类。本实训我们主要介绍单例索引和组合索引:

  • 单例索引:一个索引只包含单个列,但一个表中可以有多个单列索引;
  • 普通索引:仅加速查询 最基本的索引,没有任何限制,是我们大多数情况下使用到的索引;
  • 唯一索引:索引列中的值必须是唯一的,但允许为空值;
  • 主键索引:是一种特殊的唯一索引,不允许有空值。
  • 组合索引:在表的多个字段上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

索引的创建和删除
创建索引
创建索引有两种方式,一种是在建表时创建,另一种是建表后创建:

普通索引:
创表时创建普通索引:

CREATE table mytable(
 id INT NOT NULL,
 username VARCHAR(16) NOT NULL,
 INDEX [indexName] (username)
);


建表后创建普通索引:

create INDEX 索引名称 on 表名(字段名 desc/asc);

#或者
ALTER TABLE 表名 ADD INDEX 索引名称 (字段名);
asc 代表升序索引,desc 代表降序,mysql 默认升序索引。

唯一索引:

CREATE UNIQUE INDEX 索引名称 ON 表名(字段名);

#或者
ALTER TABLE 表名 ADD UNIQUE (字段名);

主键索引:

主键索引一般在建表时创建,会设为 int 而且是 AUTO_INCREMENT 自增类型的,例如一般表的 id 字段。

CREATE TABLE mytable (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
);


组合索引:

组合索引就是在多个字段上创建一个索引。(应用场景:当表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度)

CREATE INDEX 索引名称 ON 表名(字段1,字段2,字段3);

ALTER TABLE 表名 ADD INDEX 索引名称(字段1,字段2,字段3);

查询表中索引
查询索引 SQL:

show index from 表名;
编程要求
在右侧编辑器补充代码,要求如下:

  • 为 student 表按姓名升序建立索引,索引名为 idx_sname。

测试说明
平台会对你编写的代码进行测试,将你所创建的索引都现实出来,具体现实效果请查看右侧测试集。


开始你的任务吧,祝你成功!

 use teachingdb;/****请在此编写代码,操作完毕之后点击评测******//**********Begin**********/create index idx_sname on student(sname);/**********End**********/show index from student;

第2关:删除索引-练习

任务描述
本关任务:删除索引。

相关知识
删除索引
同样,删除索引也有两种方式。

#使用drop删除索引
drop index index_name on table_name ;

#使用alter删除索引
alter table table_name drop index index_name ;


alter table table_name drop primary key ; #删除主键索引

编程要求
根据提示,在右侧编辑器补充代码,删除索引 idx_sname。

测试说明
编写代码后,点击测评即可。


开始你的任务吧,祝你成功!

 use teachingdb;/****请在此编写代码,操作完毕之后点击评测******//**********Begin**********/
drop index idx_sname on student;/**********End**********/show index from student;

第3关:创建联合索引

任务描述
本关任务:创建联合索引 idx_sname_sdept。

相关知识
为了完成本关任务,你需要掌握:如何创建联合索引。

创建联合索引

语法:
create index 索引名称 on 表名(字段名称)

示例:
create index idx_name_age on student( name,age);

联合索引的使用规则

  • 最左前缀原则: 联合索引的查询效率依赖于索引列的顺序。查询时,必须从联合索引的最左边的列开始匹配,否则索引可能不会被使用。例如,对于索引idx_name_age:
    • 查询条件WHERE name = 'Alice' AND age = 20会使用索引。
    • 查询条件WHERE age = 20 AND name = 'Alice'也会使用索引(因为MySQL会自动优化)。
    • 查询条件WHERE age = 20不会使用索引,因为没有从最左边的列name开始。
  • 部分列的使用: 如果查询条件只使用了联合索引的一部分列(从最左边开始),索引仍然可以被部分使用。例如:
    • 查询条件WHERE name = 'Alice'会使用索引,但只会利用name这一部分。
  • 排序和范围查询:联合索引在排序和范围查询中也非常有效。例如:

SELECT * FROM students WHERE name = 'Alice' ORDER BY age;

编程要求
根据任务完成代码编写,将代码补充在右侧编辑器中: (1)在 student 表 sname 字段和 sdept 字段上创建联合索引 idx_sname_sdept; (2)编写一个只利用联合索引进行查询的例子(使用EXPLAIN 分析)。
测试说明
编写代码后,点击测评即可。


开始你的任务吧,祝你成功!

 use TeachingDb;/****请在此编写代码,操作完毕之后点击评测******//**********Begin**********//**********创建索引idx_sname_sdept**********/ 
create index idx_sname_sdept on student(sname,sdept);/**********应用举例**********/ 
EXPLAIN select sname,sdept from student where sname='马小燕' and sdept='计算机';/**********End**********/

第4关:创建唯一索引

任务描述
本关任务:创建唯一索引 uk_cname。

相关知识
为了完成本关任务,你需要掌握:如何创建唯一索引。

如何创建唯一索引

语法:

create unique index 索引名称 on 表名(字段名称);

示例:

create unique index secondIndex on student(name, address);

注意:

  • 索引名称、表名、字段名称 都不要用引号括起来;
  • 对于联合索引而言,字段名称可以有多个,中间用英文逗号分隔即可;
  • 唯一索引数据不可重复。

编程要求
在 course 表的 cname 字段上创建唯一索引 uk_cname ,并将代码补充在右侧编辑器中。

测试说明
编写代码后,点击测评即可。


开始你的任务吧,祝你成功!

 use TeachingDb;/****请在此编写代码,操作完毕之后点击评测******//**********Begin**********/create unique index uk_cname on course (cname);/**********End**********/show index from course;

第5关:创建前缀索引

任务描述
本关任务:创建前缀索引。

相关知识
前缀索引是基于列的前缀值创建的索引。例如,对于一个VARCHAR(255)类型的列,你可以选择只对前n个字符建立索引。这样,索引的大小会显著减小,但仍然可以在一定程度上提高查询性能。

创建前缀索引
创建前缀索引的两种方式

//1.使用CREATE INDEX语句
CREATE INDEX index_name ON table_name (column_name (length));

//2.使用ALTER TABLE语句
ALTER TABLE table_name ADD INDEX (column_name (length));

确定length的取值算法
确定length的SQL语句:

SELECT COUNT(DISTINCT LEFT(column_name,length))/COUNT(column_name) 
FROM table_name;

length的取值从1逐步增加,当查询返回的值为1或不再发生变化时,length的值就是前缀索引的合理取值。

编程要求
在 course 表的 cname 字段上创建前缀索引 pidx_cname,并将代码补充在右侧编辑器中:
(1)测试cname前缀索引length的合理取值;
(2)创建前缀索引 pidx_cname。

测试说明
编写代码后,点击测评即可。


开始你的任务吧,祝你成功!

 use TeachingDb;/****请在此编写代码,操作完毕之后点击评测******//**********Begin**********//**********测试cname字段前缀索引的合理取值**********/ 
select COUNT(DISTINCT LEFT(cname,4))/COUNT(cname) from course;/**********创建前缀索引pidx_cname**********/ create index pidx_cname on course(cname(4));/**********End**********/
show index from course;

任务描述
本关任务:创建全文索引 ft_cname 。

相关知识
全文索引(Full-Text Index) 是一种用于高效检索文本内容中关键词或短语的数据库索引技术。它与传统的 B-Tree 索引不同,能够支持自然语言搜索(如模糊匹配、分词、相关性排序等),适用于对长文本内容进行复杂查询的场景。

全文索引(Full-Text Index)是一种专门用于快速搜索文本内容的索引类型,通常在需要对大量文本数据进行全文搜索的场景中使用。在 MySQL 中,全文索引主要用于 TEXT 字段,但 VARCHAR 在特定场景下也可支持。

创建全文索引
创建全文索引的两种方式

//1.CRATE INDEX添加
CREATE FULLTEXT INDEX index_name ON table_name (column1,column2,...);

//2.ALTER添加
ALTER TABLE table_name ADD FULLTEXT INDEX index_name (column1,column2,...);

使用全文索引
使用全文索引的方式

SELECT * FROM 表名 WHERE MATCH(字段) AGAINST('查询文本') ;

编程要求
若在 student 表的remarks字段上以文本的形式存储学生的备注信息,在remarks字段上创建全文索引 ft_remarks,并检索是“学生干部”的学生信息,将代码补充在右侧编辑器中。

测试说明
编写代码后,点击测评即可。


开始你的任务吧,祝你成功!

 use TeachingDb;/****请在此编写代码,操作完毕之后点击评测******//**********Begin**********/
/**********(1)创建全文索引ft_remarks**********/ 
create fulltext index  ft_remarks on student (remarks);
/**********(2)显示student表上的索引**********/ 
show index from student;
/**********(3)检索“学生干部”的学生姓名和备注信息**********/ 
select sname,remarks from student where match(remarks)against('学生干部');/**********End**********/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rundeck 介绍及安装:自动化调度与执行工具

Rundeck介绍 概述:Rundeck 是什么? Rundeck 是一款开源的自动化调度和任务执行工具,专为运维场景设计,帮助工程师通过统一的平台管理和执行跨系统、跨节点的任务。它由 PagerDuty 维护(2016 年收购)&#…

基于 Python 的自然语言处理系列(85):PPO 原理与实践

📌 本文介绍如何在 RLHF(Reinforcement Learning with Human Feedback)中使用 PPO(Proximal Policy Optimization)算法对语言模型进行强化学习微调。 🔗 官方文档:trl PPOTrainer 一、引言&…

珍爱网:从降本增效到绿色低碳,数字化新基建价值凸显

2024年12月24日,法大大联合企业绿色发展研究院发布《2024签约减碳与低碳办公白皮书》,深入剖析电子签在推动企业绿色低碳转型中的关键作用,为企业实现环境、社会和治理(ESG)目标提供新思路。近期,法大大将陆…

Java实现HTML转PDF(deepSeekAi->html->pdf)

Java实现HTML转PDF,主要为了解决将ai返回的html文本数据转为PDF文件方便用户下载查看。 一、deepSeek-AI提问词 基于以上个人数据。总结个人身体信息,分析个人身体指标信息。再按一个月为维度,详细列举一个月内训练计划,维度详细至每周每天…

Estimands与Intercurrent Events:临床试验与统计学核心框架

1. Estimands(估计目标)概述 1.1 定义与作用 1.1.1 定义 Estimand是临床试验中需明确提出的科学问题,即研究者希望通过数据估计的“目标量”,定义“治疗效应”具体含义,确保分析结果与临床问题一致。 例如,在研究某种新药对高血压患者降压效果时,Estimand可定义为“在…

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互 前言一、JDBC 核心接口和类:数据库连接的“工具箱”1. 常用的 2 个“关键类”2. 必须掌握的 5 个“核心接口” 二、创建 JDBC 程序的步骤1. 第一步&#xf…

深入理解HotSpot JVM 基本原理

关于JAVA Java编程语言是一种通用的、并发的、面向对象的语言。它的语法类似于C和C++,但它省略了许多使C和C++复杂、混乱和不安全的特性。 Java 是几乎所有类型的网络应用程序的基础,也是开发和提供嵌入式和移动应用程序、游戏、基于 Web 的内容和企业软件的全球标准。. 从…

【HTTP/3:互联网通信的量子飞跃】

HTTP/3:互联网通信的量子飞跃 如果说HTTP/1.1是乡村公路,HTTP/2是现代高速公路系统,那么HTTP/3就像是一种革命性的"传送门"技术,它彻底重写了数据传输的底层规则,让信息几乎可以瞬间抵达目的地,…

Apipost免费版、企业版和私有化部署详解

Apipost是企业级的 API 研发协作一体化平台,为企业提供 API研发测试管理全链路解决方案,不止于API研发场景,增强企业API资产管理。 Apipost 基于同一份数据源,同时提供给后端开发、前端开发、测试人员使用的接口调试、Mock、自动化…

使用若依二次开发商城系统-1:搭建若依运行环境

前言 若依框架有很多版本,这里使用的是springboot3vue3这样的一个前后端分离的版本。 一.操作步骤 1 下载springboot3版本的后端代码 后端springboot3的代码路径,https://gitee.com/y_project/RuoYi-Vue 需要注意我们要的是springboot3分支。 先用g…

速成GO访问sql,个人笔记

更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 本文是基于原生的库 database/sql进行初步学习 基于ORM等更多操作可以关注我…

【C++指南】告别C字符串陷阱:如何实现封装string?

🌟 各位看官好,我是egoist2023! 🌍 种一棵树最好是十年前,其次是现在! 💬 注意:本章节只详讲string中常用接口及实现,有其他需求查阅文档介绍。 🚀 今天通过了…

系统架构师2025年论文《论软件架构评估2》

论软件系统架构评估 v2.0 摘要: 某市医院预约挂号系统建设推广应用项目是我市卫生健康委员会 2019 年发起的一项医疗卫生行业便民惠民信息化项目,目的是实现辖区内患者在辖区各公立医疗机构就诊时,可以通过多种线上渠道进行预约挂号,提升就医体验。我作为系统架构师参与此…

BEVDet4D: Exploit Temporal Cues in Multi-camera 3D Object Detection

背景 对于现有的BEVDet方法,它对于速度的预测误差要高于基于点云的方法,对于像速度这种与时间有关的属性,仅靠单帧数据很难预测好。因此本文提出了BEVDet4D,旨在获取时间维度上的丰富信息。它是在BEVDet的基础上进行拓展,保留了之前帧的BEV特征,并将其进行空间对齐后与当…

el-upload 上传逻辑和ui解耦,上传七牛

解耦的作用在于如果后面要我改成从阿里云oss上传文件,我只需要实现上传逻辑从七牛改成阿里云即可,其他不用动。实现方式有2部分组成,一部分是上传逻辑,一部分是ui。 上传逻辑 大概逻辑就是先去服务端拿上传token和地址&#xff0…

酒水类目电商代运营公司-品融电商:全域策略驱动品牌长效增长

酒水类目电商代运营公司-品融电商:全域策略驱动品牌长效增长 在竞争日益激烈的酒水市场中,品牌如何快速突围并实现长效增长?品融电商凭借「效品合一 全域增长」方法论与全链路运营能力,成为酒水类目代运营的领跑者。从品牌定位、视…

机器学习特征工程中的数值分箱技术:原理、方法与实例解析

标题:机器学习特征工程中的数值分箱技术:原理、方法与实例解析 摘要: 分箱技术作为机器学习特征工程中的关键环节,通过将数值数据划分为离散区间,能够有效提升模型对非线性关系的捕捉能力,同时增强模型对异…

【MySQL专栏】MySQL数据库的复合查询语句

文章目录 1、首先练习MySQL基本语句的练习①查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J②按照部门号升序而雇员的工资降序排序③使用年薪进行降序排序④显示工资最高的员工的名字和工作岗位⑤显示工资高于平均工资的员工信息⑥显…

Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解

目录 一、背景与需求‌二、静态页面抓取的核心流程‌三、requests库基础与请求头配置‌3.1 安装与基本请求3.2 请求头核心参数解析‌3.3 自定义请求头实战 四、实战案例:抓取豆瓣读书Top250‌1. 目标‌2. 代码实现3. 技术要点‌ 五、高阶技巧与反反爬策略‌5.1 动态…

HTML给图片居中

在不同的布局场景下&#xff0c;让 <img> 元素居中的方法有所不同。下面为你介绍几种常见的居中方式 1. 块级元素下的水平居中 如果 <img> 元素是块级元素&#xff08;可以通过 display: block 设置&#xff09;&#xff0c;可以使用 margin: 0 auto 来实现水平居…