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

浅谈MySQL之索引

1.什么是索引

        索引是一种数据结构,用于提高数据库的查询性能。它类似于书籍的目录,通过预先排序和存储一定列(或多列)的值,使数据库引擎能够更快速地定位和访问特定行的数据。索引的作用是加速数据检索的速度,降低查询的成本。

        在关系型数据库中,索引的实现通常是通过B树(或B+树)等数据结构来完成。这样的结构使得数据库引擎能够在进行查询时快速地定位到满足条件的数据,而不必遍历整个表。

        索引可以基于单个列或多个列,并且可以包括不同的类型,如唯一索引、主键索引、全文索引等。不同类型的索引适用于不同的查询需求。在MySQL中,索引是一种优化数据库查询性能的重要机制。索引可以加快数据检索的速度,降低查询的成本。

2.索引类型

MySQL支持多种类型的索引,其中最常见的包括:

  • 主键索(Primary Key) 

        主键索引是一种特殊的唯一索引,用于唯一标识表中的每一行。每个表只能有一个主键索引。主键索引可以加速数据检索,并确保表中的每行都有唯一标识。

  • 唯一索引(Unique Index):

        每个表只能有一个主键索引。主键索引可以加速数据检索,并确保表中的每行都有唯一标识。

  • 普通索引(Normal Index)

        普通索引是最基本的索引类型,没有唯一性或主键限制,可以在一个表的多个列上创建普通索引。

  • 全文索引(Full-Text Index) 

        全文索引用于在文本数据上执行全文搜索,而不是简单的匹配。主要用于对文本字段进行高效的搜索操作。

3.创建索引

3.1建表时创建索引

CREATE TABLEmember (id INT UNSIGNED PRIMARY KEY,name VARCHAR(20),email VARCHAR(36) UNIQUE KEY,)
或者
CREATE TABLEmember (id,name,email,PRIMARY KEY (id),UNIQUE KEY (email),)

3.2使用Create Index创建索引

  • 添加普通索引

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

CREATE INDEX  索引名 ON 表名(col1, col2, ..., )
  • 添加唯一索引
CREATE UNIQUE INDEX  索引名 ON 表名(col1, col2, ..., )

例如:创建一个名为idx_name的索引:

CREATE INDEX idx_name ON your_table(column_name);
  •  复合索引

 可以在多个列上创建索引,形成复合索引。复合索引可以提高某些查询的性能,但也需要注意避免创建过于庞大的复合索引。

CREATE INDEX idx_multiple_columns ON your_table(column1, column2);

3.3使用Alter table创建索引

添加主键索引

数据列不允许重复,不能为null,一张表只能有一个主键;Mysql主动将该字段进行排序

ALTER TABLE 表名 ADD Primary key (col);

添加唯一索引

索引列是唯一的,可以null;Mysql主动将该字段进行排序

ALTER TABLE 表名 ADD unique <索引名> (col1, col2, ...col3);

添加普通索引

添加普通索引, 索引值不唯一,可为null

ALTER TABLE 表名 ADD index <索引名> (col1, col2, ...,);

添加全文索引

只能在文本类型CHAR,VARCHAR, TEXT类型字段上创建全文索引;

ALTER TABLE 表名 ADD Fulltext <索引名> (col)

添加多列索引

多列是唯一的

ALTER TABLE 表名 ADD UNIQUE (col1, col2, ..., );

3.4alter table与create index创建索引的区别

(1)使用create index时需要提供索引的名称,如果是alter方式会自动生成名字。

(2)create index一次只能创建一个索引,alter方式可以创建多个。

4.查看索引信息

可以使用SHOW INDEX语句查看表的索引信息。

SHOW INDEX FROM your_table;

5.删除索引

5.1删除普通索引

通常 使用DROP INDEX语句删除索引。例如,删除名为idx_name的索引:

DROP INDEX index_name ON table_name;

index_name 是要删除的索引的名称。

table_name 是包含要删除索引的表的名称。

5.2删除主键或唯一索引

如果要删除主键或唯一索引,可以使用以下语法:

ALTER TABLE table_name DROP PRIMARY KEY; -- 删除主键 
或 ALTER TABLE table_name DROP INDEX index_name; -- 删除唯一索引

5.3注意事项

(1)删除索引可能会影响数据库性能,因此在删除索引之前,确保了解索引的使用情况和对查询性能的影响。

(2)在执行删除索引的操作之前,最好先备份相关的数据或表,以防出现意外情况。

(3)删除主键索引时,要确保删除操作不会导致数据完整性问题,例如,删除主键索引之前要确保有其他合适的唯一标识。

6.索引的优缺点

6.1优点

(1)提高查询速度: 通过使用索引,数据库引擎可以更快速地定位和检索符合查询条件的数据,减少了数据访问的成本。

(2)加速排序和聚合操作: 索引对排序和聚合操作也有积极的影响,使这些操作更加高效。

6.2缺点

(1)占用存储空间: 索引需要额外的存储空间,因为它是一种额外的数据结构。

(2)影响写操作性能: 插入、更新和删除操作可能变得更慢,因为每次这些操作时,数据库引擎需要更新索引。

(3)维护成本: 随着数据的变化,索引需要进行维护。因此,过多或不必要的索引可能导致维护成本增加。

7.写在最后

        以上是MySQL中索引的基本介绍。在设计数据库时,正确使用索引是提高查询性能的关键因素之一。在设计数据库时,需要权衡索引的使用,根据实际的查询需求和数据操作特性来合理选择和创建索引,以达到优化数据库性能的目的。

相关文章:

浅谈MySQL之索引

1.什么是索引 索引是一种数据结构&#xff0c;用于提高数据库的查询性能。它类似于书籍的目录&#xff0c;通过预先排序和存储一定列&#xff08;或多列&#xff09;的值&#xff0c;使数据库引擎能够更快速地定位和访问特定行的数据。索引的作用是加速数据检索的速度&#xff…...

Rust类型之字符串

字符串 Rust 中的字符串类型是String。虽然字符串只是比字符多了一个“串”字&#xff0c;但是在Rust中这两者的存储方式完全不一样&#xff0c;字符串不是字符的数组&#xff0c;String内部存储的是Unicode字符串的UTF8编码&#xff0c;而char直接存的是Unicode Scalar Value…...

Shell - 学习笔记 - 2.1 - Shell变量:Shell变量的定义、赋值和删除

第2章 Shell编程 这一章我们正式进入 Shell 脚本编程&#xff0c;重点讲解变量、字符串、数组、数学计算、选择结构、循环结构和函数。 Shell 的编程思想虽然和 C、Java、Python、C# 等其它编程语言类似&#xff0c;但是在语法细节方面差异还是比较大的&#xff0c;有编程经验的…...

【OCR】实战使用 - 如何提高识别文字的精准度?

实战使用 - 如何提高文字识别的精准度 我们在平常使用OCR的时候&#xff0c;经常会出现文字识别不精准的情况&#xff0c;我们改如何提高文字识别的精度呢&#xff1f; 以下是一些提高OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;文字识…...

css3浮动定位

css3浮动定位 前言浮动float的基本概念浮动的使用浮动的顺序贴靠特性浮动的元素一定能设置宽高 使用浮动实现网页布局BFC规范和浏览器差异如何创建BFCBFC的其他作用浏览器差异 清除浮动相对定位 relative绝对定位 absolute绝对定位脱离标准文档流绝对定位的参考盒子绝对定位的盒…...

Linux 上 Nginx 配置访问 web 服务器及配置 https 访问配置过程记录

目录 一、前言说明二、配置思路三、开始修改配置四、结尾 一、前言说明 最近自己搭建了个 Blog 网站&#xff0c;想把网站部署到服务器上面&#xff0c;本文记录一下搭建过程中 Nginx 配置请求转发的过程。 二、配置思路 web项目已经在服务器上面运行起来了&#xff0c;运行的端…...

css less sass 动态宽高

less height: ~"calc(100% - 30px)";若要需要按照某个比例固定高度可以用 min-height: e("calc(100vh - 184px)")css height: calc(100% - 50px);sass height:calc(100% - var(--height) );...

sqlserver导出数据为excel再导入到另一个数据库

要将SQL Server中的数据导出为Excel文件&#xff0c;然后再将该Excel文件导入到另一个数据库中&#xff0c;你可以按照以下步骤进行操作&#xff1a; 导出数据为Excel文件 echo offset SourceServer源服务器名称 set SourceDB数据库名称 set ExcelFilePath导出到的Excel文件路…...

异构微服务远程调用如何打jar包

1.服务提供方打 jar 包 RemoteUserService.java package com.finance.system.api;import com.finance.system.api.domain.dto.Enterprise; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springfra…...

赋能智慧农业生产,基于YOLOv7开发构建农业生产场景下油茶作物成熟检测识别系统

AI赋能生产生活场景&#xff0c;是加速人工智能技术落地的有利途径&#xff0c;在前文很多具体的业务场景中我们也从实验的角度来尝试性地分析实践了基于AI模型来助力生产生活制造相关的各个领域&#xff0c;诸如&#xff1a;基于AI硬件实现农业作物除草就是一个比较熟知的场景…...

Docker入门介绍

【一】从 dotCloud 到 Docker——低调奢华有内涵 1、追根溯源:dotCloud 时间倒回到两年前&#xff0c;有一个名不见经传的小公司&#xff0c;他的名字叫做:dotCloud。 dotCloud 公司主要提供的是基于 PaaS(Platform as a Service&#xff0c;平台及服务) 平台为开发者或开发商…...

第四站:指针的进阶-(二级指针,函数指针)

目录 二级指针 二级指针的用途 多级指针的定义和使用 指针和数组之间的关系 存储指针的数组(指针数组:保存地址值) 指向数组的指针(数组指针) 传参的形式(指针) 数组传参时会退化为指针 void类型的指针 函数指针 定义: 调用:两种方式:(*指针名)(参数地址) 或者 指针…...

浏览器渲染原理(面试重点)

一、浏览器是如何渲染页面的 常见的简洁答案&#xff1a; 浏览器内核拿到内容后&#xff0c;渲染流程大致如下&#xff1a;解析HTML&#xff0c;构建Dom树&#xff1b;解析CSS&#xff0c;构建Render树&#xff1b;&#xff08;将CSS代码解析成树形的数据结构&#xff0c;与D…...

C //练习 5-3 用指针方式实现第2章中的函数strcat。函数strcat(s, t)将t指向的字符串复制到s指向的字符串的尾部。

C程序设计语言 &#xff08;第二版&#xff09; 练习 5-3 练习 5-3 用指针方式实现第2章中的函数strcat。函数strcat(s, t)将t指向的字符串复制到s指向的字符串的尾部。 注意&#xff1a;代码在win32控制台运行&#xff0c;在不同的IDE环境下&#xff0c;有部分可能需要变更。…...

深度剖析Redis:从基础到高级应用

目录 引言 1、 Redis基础 1.1 Redis数据结构 1.1.1 字符串&#xff08;String&#xff09; 1.1.2 列表&#xff08;List&#xff09; 1.1.3 集合&#xff08;Set&#xff09; 1.1.4 散列&#xff08;Hash&#xff09; 1.1.5 有序集合&#xff08;Sorted Set&#xff09;…...

视频监控录像服务器(中心录像服务器)功能详细介绍

目 录 一、概述 &#xff08;一&#xff09;定义 &#xff08;二&#xff09;视频监控中心录像服务器 二、存储策略服务 &#xff08;一&#xff09;存储策略配置 1、 录入页面 2、 选择需要进行录像的视频 3、批量选择多个通道号 4、其他关键参数…...

SouthernBiotech抗荧光淬灭封片剂

荧光淬灭又称荧光熄灭或萃灭&#xff0c;是指导致特定物质的荧光强度和寿命减少的所有现象。引起荧光淬灭的物质称为荧光淬灭剂。SouthernBiotech专门开发的Fluoromount-G系列荧光封片剂是以甘油为基础&#xff0c;加入抗荧光淬灭剂&#xff0c;可明显降低荧光淬灭现象&#xf…...

[Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例

在群組中看到上述問題&#xff0c;研判應是一份隨月份變動的產品報價表單&#xff0c;空白欄可能表示該月份價格與上個月份一致。這個問題是需要取得最近一次單價和倒數第二次單價&#xff0c;常用且實務的excel案例值得紀錄。 最近一次單價: INDEX($B2:$G2,1,LARGE(IF(ISBLAN…...

TypeScript进阶(二)深入理解装饰器

✨ 专栏介绍 TypeScript是一种由微软开发的开源编程语言&#xff0c;它是JavaScript的超集&#xff0c;意味着任何有效的JavaScript代码都是有效的TypeScript代码。TypeScript通过添加静态类型和其他特性来增强JavaScript&#xff0c;使其更适合大型项目和团队开发。 在TypeS…...

书生·浦语第三次作业

我最近在参加书生浦语大模型实战营&#xff0c;这是第三次作业打卡&#xff01; 如果你也想两周玩转大模型微调&#xff0c;部署与测评全链路。报名链接&#xff1a;invite 书生浦语大模型实战营报名 邀请码可以填026014 一、基础作业&#xff1a;复现课程知识库助手搭建过程…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...