当前位置: 首页 > 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;头部将直接暴露在危险之…...

城通网盘限速破解终极指南:ctfileGet工具让你免费享受10倍下载速度

城通网盘限速破解终极指南&#xff1a;ctfileGet工具让你免费享受10倍下载速度 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经被城通网盘的限速下载折磨得痛不欲生&#xff1f;面对几十KB/s…...

终极指南:30分钟打造你的首个ESP32 AI智能硬件项目

终极指南&#xff1a;30分钟打造你的首个ESP32 AI智能硬件项目 【免费下载链接】xiaozhi-esp32 An MCP-based chatbot | 一个基于MCP的聊天机器人 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 还在为嵌入式AI开发的高门槛而烦恼吗&#xff1f;物联…...

告别重复造轮子:用快马AI一键生成无名小站高效开发模板

作为一个经常需要快速搭建小型网站的后端开发者&#xff0c;我最近发现了一个能极大提升开发效率的方法——用InsCode(快马)平台的AI生成功能来创建可复用的基础模块代码。今天就以"无名小站"的后台管理系统为例&#xff0c;分享我的实践心得。 为什么需要代码生成工…...

seo规则中的内容创作有哪些注意事项

SEO规则中的内容创作有哪些注意事项 在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已成为网站流量和曝光度提升的关键手段。其中&#xff0c;内容创作是SEO的核心要素之一。仅仅创作大量内容并不能保证网站的高排名和高流量。要想在百度等搜索引擎上取…...

数据仓库核心建模:星型模型与雪花模型全面对比与实战选择

数据仓库核心建模&#xff1a;星型模型与雪花模型全面对比与实战选择一、引言二、定义&#xff1a;什么是星型模型&#xff1f;什么是雪花模型&#xff1f;2.1 星型模型&#xff1a;定义2.2 雪花模型&#xff1a;定义三、结构流程图&#xff1a;直观对比两种模型3.1 星型模型流…...

3步打造B站高效体验:开源客户端的极致优化指南

3步打造B站高效体验&#xff1a;开源客户端的极致优化指南 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端&#xff0c;当然&#xff0c;是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP BiliBili-UWP作为一款开源客户端&#xff0c;专为Wi…...

为什么数据质量成为人工智能领域最重要的问题

简而言之&#xff1a;传统的基于人工编写规则和被动检查的数据质量体系&#xff0c;从未针对智能体人工智能进行设计。到2026年&#xff0c;当自主代理处理错误数据时&#xff0c;没有人会介入以发现问题。那些在人工智能领域取得成功的组织&#xff0c;并非从更好的模型入手&a…...

别再自己写驱动了!用STM32CubeMX HAL库5分钟搞定TM1637数码管显示

5分钟用STM32CubeMX HAL库驱动TM1637数码管&#xff1a;告别底层代码的终极方案 每次面对数码管驱动时&#xff0c;那些繁琐的GPIO初始化、时序控制和寄存器配置是否让你头疼不已&#xff1f;传统开发方式需要手动编写大量底层代码&#xff0c;不仅耗时耗力&#xff0c;还容易因…...

DVB-S系统设计:从理论到FPGA实现的完整指南

1. DVB-S系统概述&#xff1a;卫星数字电视的核心技术 DVB-S&#xff08;Digital Video Broadcasting - Satellite&#xff09;是卫星数字电视广播的国际标准&#xff0c;它定义了从信号编码、调制到传输的完整技术规范。我第一次接触DVB-S系统是在2015年参与一个卫星接收机项目…...

【Typst源文件】Typst 标题层级与样式定制

1. 标题层级&#xff1a;等号 的使用 Typst 使用等号 来定义标题&#xff0c;等号的数量决定标题层级。理论上没有层级限制&#xff0c;可以根据文档结构无限嵌套。一级标题二级标题三级标题四级标题五级标题六级标题七级标题八级标题使用示例IntroductionBackgroundPrevious…...