当前位置: 首页 > news >正文

mysql学习教程,从入门到精通,SQL 创建索引(CREATE INDEX 语句)(35)

1、SQL 创建索引(CREATE INDEX 语句)

在SQL中,创建索引(CREATE INDEX)是一种用于提高数据库查询性能的方法。索引类似于书的目录,通过它可以更快地定位到表中的特定行。以下是一个创建索引的示例,以及对其各部分的解释。
假设我们有一个名为 employees 的表,表结构如下:

CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department_id INT,hire_date DATE
);

我们希望在 last_name 列上创建一个索引,以便更快地执行基于姓氏的查询。以下是创建索引的SQL语句:

CREATE INDEX idx_last_name
ON employees (last_name);

解释

  • CREATE INDEX:这是创建索引的SQL命令。
  • idx_last_name:这是索引的名称。在创建索引时,为其指定一个有意义的名称是一个好习惯,这有助于在将来管理索引。
  • ON employees (last_name):这指定了索引要创建的表和列。在这个例子中,索引将创建在 employees 表的 last_name 列上。

创建复合索引

有时,你可能希望在一个或多个列上创建复合索引,以优化涉及这些列的多个列的查询。例如,我们希望在 last_namefirst_name 列上创建一个复合索引:

CREATE INDEX idx_full_name
ON employees (last_name, first_name);

创建唯一索引

如果你希望确保列中的值是唯一的,可以创建唯一索引。例如,我们希望在 employee_id 列上创建一个唯一索引(虽然在这个例子中 employee_id 已经是主键,自然唯一,但这里仅作为示例):

CREATE UNIQUE INDEX idx_unique_employee_id
ON employees (employee_id);

创建索引时的注意事项

  1. 性能:虽然索引可以显著提高查询性能,但它们也会增加插入、更新和删除操作的成本,因为数据库需要维护索引。
  2. 空间:索引会占用额外的存储空间。
  3. 选择性:索引在选择性高的列上更有效。选择性是指列中不同值的数量与总行数之比。例如,性别列(只有“男”和“女”两个值)的选择性较低,而身份证号列的选择性较高。

当然可以,以下是几个使用CREATE INDEX语句创建索引的具体案例:

案例一:创建普通索引

假设我们有一个名为students的表,包含以下字段:student_id(学生ID)、first_name(名字)、last_name(姓氏)、grade(年级)和enrollment_date(入学日期)。我们希望在last_name字段上创建一个索引,以便加快基于姓氏的查询速度。

CREATE INDEX idx_last_name
ON students (last_name);

案例二:创建复合索引

现在,我们希望在students表上创建一个复合索引,以便能够同时加快基于姓氏和名字的查询速度。复合索引是在多个字段上创建的索引,当查询条件包含这些字段时,数据库可以利用复合索引来提高查询性能。

CREATE INDEX idx_full_name
ON students (last_name, first_name);

案例三:创建唯一索引

假设我们有一个名为courses的表,包含以下字段:course_id(课程ID)、course_name(课程名称)和course_code(课程代码)。我们希望确保course_code字段中的值是唯一的,因此可以在该字段上创建一个唯一索引。

CREATE UNIQUE INDEX idx_unique_course_code
ON courses (course_code);

唯一索引不仅提高了查询性能,还确保了数据的唯一性。如果尝试插入一个已经存在的course_code值,数据库将拒绝该操作并返回错误。

案例四:在大数据表上创建索引

假设我们有一个名为orders的表,该表包含大量的订单数据,并且我们经常需要基于customer_idorder_date字段来查询订单。为了提高查询性能,我们可以在这两个字段上创建一个复合索引。

CREATE INDEX idx_customer_order_date
ON orders (customer_id, order_date);

这个复合索引将帮助数据库更快地定位到特定客户的订单,特别是当查询条件同时包含customer_idorder_date字段时。

注意事项

  1. 索引的选择性:索引在选择性高的列上更有效。选择性是指列中不同值的数量与总行数之比。例如,在性别列上创建索引可能并不是一个好的选择,因为性别列通常只有几个不同的值(如“男”和“女”)。
  2. 索引的维护成本:虽然索引可以显著提高查询性能,但它们也会增加插入、更新和删除操作的成本。因为数据库需要在这些操作发生时维护索引。
  3. 索引的数量:过多的索引可能会导致性能问题。每个索引都需要占用额外的存储空间,并且在插入、更新和删除操作时都需要进行维护。因此,应该根据实际需求合理创建索引。
    通过以上案例,我们可以看到CREATE INDEX语句在优化数据库查询性能方面的重要作用。在实际应用中,应该根据具体的查询需求和数据特点来选择合适的索引类型和字段。
    以下是一些实际的SQL创建索引的案例,这些案例基于不同的数据库表和查询需求,展示了如何使用CREATE INDEX语句来优化查询性能。

案例一:在员工表上创建索引

假设我们有一个名为employees的表,该表存储了公司的员工信息。我们经常在last_namedepartment_id字段上进行查询,因此希望在这两个字段上创建索引。

-- 在last_name字段上创建普通索引
CREATE INDEX idx_employees_last_name
ON employees (last_name);-- 在department_id字段上创建普通索引
CREATE INDEX idx_employees_department_id
ON employees (department_id);
-- 或者,我们可以创建一个复合索引,以同时优化基于last_name和department_id的查询
CREATE INDEX idx_employees_last_name_department_id
ON employees (last_name, department_id);

案例二:在订单表上创建索引

假设我们有一个名为orders的表,该表存储了公司的订单信息。我们经常在customer_idorder_datestatus字段上进行查询和过滤,因此希望在这些字段上创建索引。

-- 在customer_id字段上创建普通索引
CREATE INDEX idx_orders_customer_id
ON orders (customer_id);
-- 在order_date字段上创建普通索引
CREATE INDEX idx_orders_order_date
ON orders (order_date);-- 在status字段上创建普通索引(如果status字段的选择性较高)
CREATE INDEX idx_orders_status
ON orders (status);-- 或者,我们可以根据查询需求创建复合索引
-- 例如,优化基于customer_id和order_date的查询
CREATE INDEX idx_orders_customer_id_order_date
ON orders (customer_id, order_date);

案例三:在商品表上创建唯一索引

假设我们有一个名为products的表,该表存储了公司的商品信息。我们希望确保每个商品的product_code是唯一的,因此可以在该字段上创建唯一索引。

-- 在product_code字段上创建唯一索引
CREATE UNIQUE INDEX idx_products_unique_product_code
ON products (product_code);

案例四:在文章表上创建全文索引

假设我们有一个名为articles的表,该表存储了公司的文章信息。我们经常需要在文章的content字段中进行全文搜索,因此可以在该字段上创建全文索引(注意,全文索引的创建方式可能因数据库系统而异,以下以MySQL为例)。

-- 在MySQL中创建全文索引(需要确保数据库和表支持全文索引功能)
CREATE FULLTEXT INDEX idx_articles_fulltext_content
ON articles (content);

注意事项

  1. 索引的选择性:索引在选择性高的列上更有效。选择性是指列中不同值的数量与总行数之比。例如,在性别或布尔类型的列上创建索引可能并不是一个好的选择,因为这些列的选择性通常很低。
  2. 索引的维护成本:虽然索引可以显著提高查询性能,但它们也会增加插入、更新和删除操作的成本。因为数据库需要在这些操作发生时维护索引。因此,在创建索引时,需要权衡查询性能和数据维护成本。
  3. 索引的数量:过多的索引可能会导致性能问题。每个索引都需要占用额外的存储空间,并且在插入、更新和删除操作时都需要进行维护。因此,应该根据实际需求合理创建索引。
    以上案例展示了如何在不同的数据库表和字段上创建索引,以优化查询性能。在实际应用中,应该根据具体的查询需求和数据特点来选择合适的索引类型和字段。

相关文章:

mysql学习教程,从入门到精通,SQL 创建索引(CREATE INDEX 语句)(35)

1、SQL 创建索引(CREATE INDEX 语句) 在SQL中,创建索引(CREATE INDEX)是一种用于提高数据库查询性能的方法。索引类似于书的目录,通过它可以更快地定位到表中的特定行。以下是一个创建索引的示例,以及对其各部分的解释…...

Pikachu-Cross-Site Scripting-DOM型xss_x

查看代码&#xff0c;输入的内容&#xff0c;通过get请求方式&#xff0c;用text 参数带过去&#xff1b; 获取text内容&#xff0c;赋值给xss 然后拼接到 dom 里&#xff1b;构造payload的关键语句&#xff1a; <a href"xss">就让往事都随风,都随风吧</a&…...

Pikachu-Cross-Site Scripting-xss之htmlspecialchars

首先输入各种字符 查看页面元素&#xff0c;可以看到这里对一些符号做了转换&#xff0c;但是 单引号等几个符号没处理&#xff1b; 从代码上看&#xff1b;使用单引号做闭合&#xff1b; 构造payload a onclickalert(11) 提交&#xff0c;得到xss攻击...

CSS基础中padding详解

文章目录 CSS基础中padding详解一、引言二、Padding基础1、Padding属性1.1、Padding的四个方向 2、Padding的值类型3、代码示例 三、Padding简写方法1、简写顺序2、简写规则3、代码示例 四、Padding对元素大小的影响1、解决方案1.1、Box-sizing属性1.2、计算实际宽度 五、总结 …...

OpenGL笔记十九之相机系统

OpenGL笔记十九之相机系统 —— 2024-10-02 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十九之相机系统1.运行1.1.游戏相机1.2.轨迹球相机 2.游戏相机与轨迹球相机切换3.博主笔记本要运行需要更改的文件更改1:28_OpenGL_CameraSystem/applicat…...

P-Tuning v2:一种普遍有效的提示调整方法

人工智能咨询培训老师叶梓 转载标明出处 预训练语言模型通过微调&#xff08;fine-tuning&#xff09;来适应特定任务虽然效果显著&#xff0c;但存在训练成本高、参数存储量大等问题。为了解决这些问题&#xff0c;清华大学的研究者们提出了一种名为P-Tuning v2的提示调整&am…...

微信小程序启动不起来,报错凡是以~/包名/*.js路径的文件,都找不到,试过网上一切方法,最终居然这么解决的,【避坑】命运的齿轮开始转动

app.json "resolveAlias": {"~/*": "/*"},文件代码也没有问题&#xff0c;网上的方法试过来了&#xff0c;大模型AI也问过遍&#xff0c;熬夜到凌晨2点半&#xff0c;最不可思议的是居然是因为微信开发者工具版本的问题&#xff0c;我真的是笑死…...

C#串口温度读取

背景&#xff1a;每天学点&#xff0c;坚持 要安装好虚拟串口和modbus poll&#xff0c;方便调试&#xff08;相关资源在文末&#xff0c;也可以私信找我要&#xff09; 传感器部分使用的是达林科技的DL11B-MC-D1&#xff0c;当时42软妹币买的&#xff08;官网上面有这个传感…...

2.5 Spring Boot整合Spring MVC框架

今天&#xff0c;我将向大家介绍如何在Spring Boot中整合Spring MVC框架&#xff0c;并展示如何创建和测试控制层&#xff08;Controller&#xff09;。 首先&#xff0c;让我们简要回顾一下Spring MVC。Spring MVC是一个基于Servlet的MVC框架&#xff0c;它简单、侵入性小&am…...

Java 归并排序

归并排序&#xff08;Merge Sort&#xff09;是一种基于分治法的排序算法。它将一个大数组分成两个较小的子数组&#xff0c;分别对每个子数组进行排序&#xff0c;然后再将这两个已排序的子数组合并成一个完整的已排序数组。归并排序的时间复杂度为 O(n log n)&#xff0c;其中…...

20241008深度学习动手篇

文章目录 1.如何写一个神经网络进行训练?1.1创建一个子类,搭建你需要的神经网络结构1.2 加载数据集1.3 自定义一些指标评估函数1.4训练1.5 结果展示 2.参考文献 1.如何写一个神经网络进行训练? 1.1创建一个子类,搭建你需要的神经网络结构 # File: 241008LeNet.py # Author:…...

对序列化反序列化在项目中的使用优化

文章目录 序列化是什么&#xff1f;常见的序列化协议使用序列化反序列化序列化List反序列化List 查看源码&#xff0c;分析不足进行改善 序列化是什么&#xff1f; 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中&#xff0c;或者在网络传输 Java 对象&#xff0c…...

查看 git log的过程中看到 :说明日志输出可能超出屏幕大小,系统进入了分页模式

在命令行提示符中&#xff0c;通常 : 表示系统等待进一步的输入。如果你在查看 git log 的过程中看到 :&#xff0c;说明日志输出可能超出屏幕大小&#xff0c;系统进入了分页模式&#xff0c;默认使用 less 命令查看内容。 此时你可以&#xff1a; 按 q 退出日志查看。按 En…...

Linux--信号量详解

目录 一、信号量 1、信号量相关函数 2、多线程环形队列生产消费模型 3、实现代码 信号量是将整体的资源分割成多份使用 信号量本质是对资源的预定机制 一、信号量 1、信号量相关函数 创建信号量: sem_init: int sem_init(sem_t *sem, int pshared, unsigned int value); …...

【重学 MySQL】五十一、更新和删除数据

【重学 MySQL】五十一、更新和删除数据 更新数据删除数据注意事项 在MySQL中&#xff0c;更新和删除数据是数据库管理的基本操作。 更新数据 为了更新&#xff08;修改&#xff09;表中的数据&#xff0c;可使用UPDATE语句。UPDATE语句的基本语法如下&#xff1a; UPDATE ta…...

Web3与人工智能的交叉应用探索

随着数字技术的发展&#xff0c;Web3与人工智能&#xff08;AI&#xff09;之间的结合正逐渐成为一个重要的研究领域。Web3技术旨在实现更加去中心化和透明的互联网&#xff0c;而人工智能则在数据分析、自动化决策和增强人类能力方面展示了巨大的潜力。 1. 去中心化数据管理与…...

【springboot9736】基于springboot+vue的逍遥大药房管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 伴随着全球信息化发展&#xff0c;行行业业都与计算机技…...

四.网络层(上)

目录 4.1网络层功能概述 4.2 SDN基本概念 4.3 路由算法与路由协议 4.3.1什么是路由协议&#xff1f; 4.3.2什么是路由算法&#xff1f; 4.3.3路由算法分类 (1)静态路由算法 (2)动态路由算法 ①全局性 OSPF协议与链路状态算法 ②分散性 RIP协议与距离向量算法 4.3.…...

Leecode热题100-56.合并区间

以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;intervals [[1,3…...

安全帽未佩戴预警系统 劳保防护用品穿戴监测系统 YOLO

在建筑、矿山、电力等高危行业中&#xff0c;工人面临着各种潜在的危险&#xff0c;如高空坠物、物体打击等。安全帽能够有效地分散和吸收冲击力&#xff0c;大大降低头部受伤的严重程度。一旦工人未正确佩戴安全帽&#xff0c;在遭遇危险时&#xff0c;头部将直接暴露在危险之…...

环境科研必备:从入门到精通:大气颗粒物PMF源解析技术全案解析(含软件实操)

在大气环境科研领域&#xff0c;源解析是精准治污的“眼睛”。而在众多源解析方法中&#xff0c;PMF&#xff08;正定矩阵因子分解&#xff09;模型因其无需先验信息、结果物理意义明确等优势&#xff0c;成为了科研人员手中的“金标准”。然而&#xff0c;很多同学在实操中常常…...

曾经我和大模型交流业务实现记录

第一次&#xff1a; 我有一组子组件11个&#xff0c;通过子组件的不同组合&#xff0c;可以组成表单&#xff0c;这些表单让不同的用户使用&#xff0c;表单组成公共的内容&#xff0c;让大部分用户使用&#xff0c;当然用户可以在这些表单的基础上修改一些默认值&#xff0c;变…...

合肥艺星12周年超级盛典 以“独1无2”之名,立品质医美新坐标

2026年4月1日,合肥艺星12周年超级盛典正式启幕。十二年,不只是时间的沉淀,更是品牌在品质、技术、服务、标准、态度、团队、城市责任与星品矩阵八大维度上,构建完整“坐标系”的高光时刻。合肥艺星以“独1无2”之姿,向安徽乃至全国医美行业定义出一份关于“独一”的答卷。独1无…...

IP-Adapter-FaceID在社交媒体中的应用:内容创作与分享

IP-Adapter-FaceID在社交媒体中的应用&#xff1a;内容创作与分享 【免费下载链接】IP-Adapter-FaceID 项目地址: https://ai.gitcode.com/hf_mirrors/h94/IP-Adapter-FaceID IP-Adapter-FaceID是一款基于Stable Diffusion的AI人脸生成工具&#xff0c;它通过面部识别模…...

【数值分析】线性方程组求解的MATLAB实战:从高斯消元到追赶法

1. 线性方程组求解的数值方法概述 在工程计算和科学研究中&#xff0c;线性方程组的求解是一个基础而重要的问题。想象一下&#xff0c;你正在设计一座桥梁&#xff0c;需要计算各个节点的受力情况&#xff1b;或者你在分析电路时&#xff0c;需要确定各个支路的电流大小。这些…...

comsol电磁超声压电接收EMAT 在1mm厚铝板中激励250kHz的电磁超声在200mm位...

comsol电磁超声压电接收EMAT 在1mm厚铝板中激励250kHz的电磁超声在200mm位置处设置一个深0.8mm的裂纹缺陷&#xff0c;左端面设为低反射边界 在85mm位置处放置一个压电片接收信号&#xff0c;信号如图3所示&#xff0c;三个波分别为始波&#xff0c;裂纹反射波(S0模态)和右端面…...

3个实战场景×5个核心技巧:Umi-OCR本地化部署与效率提升完全指南

3个实战场景5个核心技巧&#xff1a;Umi-OCR本地化部署与效率提升完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置…...

用Simulink+Carsim复现论文:四轮转向后轮控制5种算法对比(附模型下载)

用SimulinkCarsim复现论文&#xff1a;四轮转向后轮控制5种算法对比&#xff08;附模型下载&#xff09; 在车辆动力学与控制领域&#xff0c;四轮转向技术正逐渐从豪华车型向主流市场渗透。不同于传统的前轮转向系统&#xff0c;四轮转向通过后轮主动参与转向&#xff0c;显著…...

工程伦理案例分析:从经典失败项目看责任分配与风险预防

工程伦理案例分析&#xff1a;从经典失败项目看责任分配与风险预防 当一座桥梁在通车典礼上轰然倒塌&#xff0c;当一栋新建大楼在台风中支离破碎&#xff0c;这些触目惊心的工程事故背后&#xff0c;往往隐藏着复杂的伦理困境。工程伦理不是简单的对错判断题&#xff0c;而是需…...

ProfControl V8的介绍 阵列生成

作者&#xff1a;刘凌波链接&#xff1a;环野电子, profcontrolhttp://oa.profcontrol.cn/teaching_V8-7926f783c6.html来源&#xff1a;ProfControl阵列生成ProfControl支持基于仿射变换的阵列快速生成方式&#xff0c;ProfControl支持对各种对象进行阵列生产&#xff08;包括…...