索引简单概述(SQL)
一、什么是索引?
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),他们包含着对数据表里所有记录的引用指针。
索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查找、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。
更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,他是要占据物理空间的。
二、索引有哪些优缺点?
索引的优点:
- 可以打打加快数据的检索速度,这也是创建索引的最主要的原因。
- 通过使用索引,可以在查询的过程中,使用优化隐藏器,体改系统的性能。
索引的缺点:
- 时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增删改的执行效率。
- 空间方面:索引需要栈物理内存。
三、索引使用场景有哪些?

上图中,根据id查询记录,因为id字段仅建立了主键索引,因此此SQL执行可选的索引只有主键索引,如果有多个,最终会选一个较优的作为检索的依据。
-- 增加一个没有建立索引的字段
alter table innodb1 add sex char(1);
-- 按sex检索时可选的索引为null
EXPLAIN SELECT * from innodb1 where sex='男';

可以尝试在一个字段未建立索引时,根据该字段查询的效率,然后对该字段建立索引(alter table 表名 add index(字段名)),同样的SQL执行的效率,你会发现查询效率会有明显的提升(数据量越大越明显)。
order by
当我们使用order by将查询结果按照某个字段排序时,如果该字段没有建立索引,那么执行计划会将查询出的所有数据使用外部排序(将数据从硬盘分批读取到内存使用内部排序,最后合并排序结果),这个操作是很影响性能的,因为需要将查询涉及到的所有数据从磁盘中读到内存(如果单条数据过大或者数据量过多都会降低效率),更无论读到内存之后的排序了。
但是如果我们对该字段建立索引alter table 表名 add index(字段名),那么由于索引本身是有序的,因此直接按照索引的顺序和映射关系逐条取出数据即可。而且如果分页的,那么只用取出索引表某个范围内的索引对应的数据,而不用像上述那取出所有数据进行排序再返回某个范围内的数据。(从磁盘取数据是最影响性能的)
join
对join语句匹配关系(on)涉及的字段建立索引能够提高效率
索引覆盖
如果要查询的字段都建立过索引,那么引擎会直接在索引表中查询而不会访问原始数据(否则只要有一个字段没有建立索引就会做全表扫描),这叫索引覆盖。因此我们需要尽可能的在select后只写必要的查询字段,以增加索引覆盖的几率。
这里值得注意的是不要想着为每个字段建立索引,因为优先使用索引的优势就在于其体积小。
四、索引有哪几种类型?
主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。
唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
- 可以通过
ALTER TABLE table_name ADD UNIQUE (column);创建唯一索引 - 可以通过
ALTER TABLE table_name ADD UNIQUE (column1,column2);创建唯一组合索引
普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL值。
- 可以通过
ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引 - 可以通过
ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引
全文索引: 是目前搜索引擎使用的一种关键技术。
- 可以通过
ALTER TABLE table_name ADD FULLTEXT (column);创建全文索引
相关文章:
索引简单概述(SQL)
一、什么是索引? 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),他们包含着对数据表里所有记录的引用指针。 索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构࿰…...
union all 和 union 的区别,mysql union全连接查询
602. 好友申请 II :谁有最多的好友(力扣mysql题,难度:中等) RequestAccepted 表: ------------------------- | Column Name | Type | ------------------------- | requester_id | int | | accepter_id | int | | accept_date …...
UDP和TCP的区别
UDP (User Datagram Protocol) 和 TCP (Transmission Control Protocol) 是两种常见的传输层协议。它们在设计和用途上有很大的区别,以下是它们的主要差异: 连接性: TCP: 是一个连接导向的协议。它首先需要建立连接,数据传输完毕后再终止连接…...
阿里云 MSE 助力开迈斯实现业务高增长背后带来的服务挑战
开迈斯新能源科技有限公司于 2019 年 5 月 16 日成立,目前合资股东分别为大众汽车(中国)投资有限公司、中国第一汽车股份有限公司、一汽-大众汽车有限公司[增资扩股将在取得适当监督(包括反垄断)审批后完成]、万帮数字…...
消灭怪物的最大数量【力扣1921】
一、题目分析 需要满足的条件: 只能在每分钟的开始使用武器武器能杀死距离城市最近的怪兽怪兽到达城市就会输掉游戏 游戏最优策略:我们可以在每分钟的开始都使用一次武器,用来杀死距离城市最近的怪兽。这样可以在力所能及的范围内…...
数据结构之算法
算法的基本概念 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法 算法的基本要素 一个算法是由两种基本要素组成:一是对数据对象的运算和操作;二是算法的控制结构 算法中对数据的运算和操作 在一般计算机系统中…...
MyBatis与MyBatis-Plus的分页以及转换
一、介绍 MyBatis和MyBatis-Plus都是Java持久化框架,用于简化数据库访问和操作。它们提供了面向对象的方式来管理关系型数据库中的数据。 MyBatis是一个轻量级的持久化框架,通过XML或注解配置,将SQL语句与Java对象进行映射,使开…...
TCP/IP网络编程(二) 套接字协议及其数据传输特性
文章目录 套接字协议及其数据传输特性关于协议创建套接字协议族套接字类型1:面向连接的套接字(SOCK_STREAM)套接字类型2:面向消息的套接字(SOCK_DGRAM)协议的最终选择面向连接的套接字:TCP套接字…...
在k8s中使用secret存储敏感数据与四种用法
当需要存储敏感数据时可以使用,secret会以密文的方式存储数据。 创建secret的四种方法 (1)通过--from-literal #每个--from-literal对应一个信息条目 kubectl create secret generic mysecret --from-literalusernameadmin --from-litera…...
国产10米分辨率的卫星介绍、下载和处理教程
10米分辨率的资源卫星介绍、下载和处理教程 简介 说起免费的10米分辨率卫星影像,大家首先想到的是sentinel卫星。但其实还有我国的中巴地球资源卫星04星(CBERS04)。 中巴地球资源卫星(China Brazil Earth Resources Satellite, CBERS)是中国和巴西共同投资、联合研制的地球…...
解决SpringBoot项目war部署到tomcat下无法Nacos中注册服务问题
问题说明 怎么解决Spring Boot项目部署到tomcat下无法Nacos中注册服务问题",希望能够解决您遇到有关问题。 在使用Nacos作为注册中心的Spring Boot项目,以war包形式部署到服务器上,启动项目发现该服务无法在Nacos中注册。 分析 …...
C++中的##、#符号含义
在C中,## 和 # 是两个不同的预处理符号。这些符号都是在C的预处理阶段使用的,用于在代码编译之前对文本进行操作。 #(字符串化操作符): 用于将宏参数转换为字符串常量。 #define STRINGIZE(x) #x const char* str S…...
探究Vue3中的Composition API:优化组件逻辑的新利器
一、toRef函数 在 Vue 3.0 中,引入了一种新的响应式 API,即 toRef。toRef 函数可以将一个普通值转换为响应式引用类型,这样就可以在模板中直接使用这个响应式引用类型的属性,并且当该属性发生变化时,视图会自动更新。 <templat…...
Google Services Framework 谷歌服务框架的安装以及遇到的常见问题
安装谷歌三件套: 1、Google 服务框架(Google Services Framework)下载地址: https://www.apkmirror.com/apk/google-inc/google-services-framework/ 注意一定要选择与自己手机对应的安卓系统版本的服务框架。 2、Google Play Se…...
学习高级数据结构:探索平衡树与图的高级算法
文章目录 1. 平衡树:维护数据的平衡与高效性1.1 AVL 树:严格的平衡1.2 红黑树:近似平衡 2. 图的高级算法:建模复杂关系与优化2.1 最小生成树:寻找最优连接方式2.2 拓扑排序:解决依赖关系 拓展思考 …...
centos7离线安装neo4j
一、准备需要的rpm包 本地环境执行如下命令: docker pull couchbase/centos7-systemd docker run -it couchbase/centos7-systemd bash # 可能需要换源 yum update -y vi /etc/yum.conf # 修改其中的keepcache1 rpm --import https://debian.neo4j.com/neotechnol…...
【黑马头条之项目部署_持续集成Jenkins】
本笔记内容为黑马头条项目的项目部署_持续集成部分 目录 一、内容介绍 1、什么是持续集成 2、持续集成的好处 3、今日内容 二、软件开发模式 1、软件开发生命周期 2、软件开发瀑布模型 3、软件的敏捷开发 三、Jenkins安装配置 1、Jenkins介绍 2、Jenkins环境搭建 …...
前端自动化部署,Devops,CI/CD
DevOps 提到 Jenkins,想到的第一个概念就是 CI/CD 在这之前应该再了解一个概念。 DevOps Development 和 Operations 的组合,是一种方法论,并不特指某种技术或者工具。DevOps 是一种重视 Dev 开发人员和 Ops 运维人员之间沟通、协作的流程。…...
22 元类技术(面向切片编程)|ORM的实现|抽象类与接口类
文章目录 前情知识补充hasattr 函数setattr函数getattr函数join 函数 元类技术使用type创建类什么是元类(概念总结)\_\_metaclass\_\_属性使用metaclass 的函数方式进行创建类使用metaclass 的类方式进行创建类 自定义元类 元类实现ORM接口类与抽象类抽象…...
fuchsia系统介绍
fuchsia系统 Fuchsia,是由Google公司开发的继Android和Chrome OS之后的第三个系统,已在Github中公开的部分源码可以得知。Google对于Fuchsia的说明是“Pink(粉红)Purple(紫色)Fuchsia(灯笼海棠…...
AI测试的现状与未来:AI会取代人工测试吗
在软件测试领域,AI技术的崛起正掀起一场深刻变革。从自动化测试用例生成到智能缺陷检测,AI的应用场景不断拓展,效率提升显著。这让众多软件测试从业者不禁心生焦虑:AI是否会彻底取代人工测试?要解答这个问题࿰…...
颈椎健康互助平台
颈椎健康互助平台选题背景分析随着信息技术的飞速发展和现代社会工作、生活方式的深刻变革,颈椎健康问题已从一个单纯的医学议题,演变为一个影响广泛、亟待社会协同解决的公共健康挑战。颈椎健康互助平台的选题,正是在这一宏观背景下应运而生…...
Claude Code 配置手册
验证已经安装node和npmnode -v npm -v如果显示版本号且 ≥ 18.0.0,则说明安装成功安装CLInpm i -g anthropic-ai/claude-codelatest npm i -g openai/codexlatest npm i -g google/gemini-clilatest根目录下新建 settings.json 配置文件vim ~/.claude/settings.json…...
嵌入式异步弱总线AWBus-lite:解耦模块通信的轻量级框架设计
1. 项目概述:为什么需要关注AWBus-lite?在嵌入式系统开发,尤其是资源受限的MCU(微控制器)项目中,模块间的通信与解耦一直是个核心痛点。传统的做法,要么是模块间直接函数调用,导致代…...
ChatGPT对技术从业者的影响:机遇与挑战
在人工智能技术飞速发展的当下,ChatGPT这类大语言模型的横空出世,无疑在科技领域投下了一颗重磅炸弹。对于软件测试从业者而言,这既是一场前所未有的机遇,也是一次严峻的挑战。它不仅重塑了测试工作的模式与效率,更对从…...
YOLOv5实战解析——激活函数的选择与调优
1. 激活函数在YOLOv5中的核心作用 第一次接触YOLOv5时,我被它的检测精度惊艳到了。但真正让我困惑的是:为什么同样的网络结构,换个激活函数效果就天差地别?后来在调试一个工业质检项目时,我才彻底明白激活函数的重要性…...
用NE555和立创EDA做个会‘叮咚’的门铃:从原理图到PCB打板的完整DIY记录
从零打造NE555叮咚门铃:立创EDA全流程实战指南 当电子爱好者第一次尝试将电路图转化为实物时,往往会面临软件操作、元件选型和生产对接的多重挑战。本文将以经典NE555叮咚门铃为例,手把手演示如何用立创EDA完成从原理图设计到PCB打板的完整流…...
MSP430F5438 RTC模块配置与低功耗应用实战指南
1. 项目概述与核心价值最近在整理一个老项目的资料,翻到了当年用TI的MSP430F5438做的一个数据记录仪。这个项目里,实时时钟(RTC)模块的稳定性和低功耗配置是关键,当时为了搞定它,可没少花功夫。今天就把关于…...
UVM验证效率提升:利用仿真器保存恢复机制消除冗余配置周期
1. 验证环境中的冗余周期之痛:一个普遍存在的效率瓶颈在芯片验证领域,尤其是使用UVM(Universal Verification Methodology)构建的复杂验证环境中,我们常常会面临一个看似不起眼、实则消耗巨大的问题:冗余的…...
为什么英语是编程最重要的前置技能?Newbie-Guideline揭示成功秘诀
为什么英语是编程最重要的前置技能?Newbie-Guideline揭示成功秘诀 【免费下载链接】Newbie-Guideline 컴퓨터과학/공학 신입생 및 비전공자 신입을 위한 지침서 项目地址: https://gitcode.com/gh_mirrors/ne/Newbie-Guideline 在编程学习的道路上࿰…...
