MySQL数据库——索引
目录
什么是索引(Index)?
怎样加索引?
索引的特点
索引类型
主键索引(Primary Key)
辅助索引(二级索引)
聚集索引和非聚集索引
聚集索引
非聚集索引
单列索引和联合索引
单列索引
联合索引
创建索引
删除索引
创建索引的原则
一.合适创建索引的字段
1.不为 NULL 的字段
2.被频繁查询的字段
3.被作为条件查询的字段
4.被经常频繁用于连接的字段
二.不合适创建索引的字段
1.被频繁更新的字段应该慎重建立索引
2.不被经常查询的字段没有必要建立索引
3.尽可能的考虑建立联合索引而不是单列索引
4.注意避免冗余索引
5.考虑在字符串类型的字段上使用前缀索引代替普通索引
使用索引一定会提高性能吗?(面试题)
什么是索引(Index)?
索引就像词典的目录,我们想去查找某个字的时候,先去目录定位字的位置,然后根据位置去找到字。不用一页一页逐个翻找,大大加快了我们找到目标的效率。
MyISAM和Innodb都使用了B+树这种数据结构做为索引(数据库默认存储引擎Innodb)
怎样加索引?
CREATE INDEX 索引名称 ON 表名 (列名, 列名, ...);
索引的特点
1、显著加快数据的检索效率;
2、需要占用额外的物理空间存储索引;
3、索引的创建和维护需要耗费时间。
索引类型
主键索引(Primary Key)
一张表的主键就是主键索引,每张表只能有一个主键且不能为null,主键是唯一的、不可重复。主键可以直接定位数据。
辅助索引(二级索引)
辅助索引的作用原理是:根据辅助索引找到主键,然后根据主键索引获得目标数据。(辅助索引并不直接存储数据的位置,而是存储主键的位置)
除了主键索引之外的其他的所有索引都是辅助索引。
回表:即 二次查询: 当查到索引对应的指针或主键后,可能还需要根据指针或主键再到数据文件或表中查询。
如果,要查询的字段name 已经建立了索引,索引的key就是name的值,这种情况下就可以直接把查到的name返回,不需要再“回表”查询,这种情况就是覆盖索引。
聚集索引和非聚集索引
聚集索引
聚集索引:索引结构和数据一起存放,聚集索引的排列顺序与表中数据的排列顺序是一致的(数据会按照索引的顺序在物理空间按顺序存储),所以它的查询效率非常高;但是由于物理连续,进行修改时所需要的操作就会很慢(例如在中间某位置插入新数据时,后边的数据都要往后移动)。
MySQL的默认存储引擎是InnoDB,所以创建的主键索引就是聚集索引。
非聚集索引
非聚集索引:索引结构和数据分开存放,数据在逻辑上是顺序存放的,物理上是散列存放的。
除了聚集索引之外的,都是非聚集索引。
聚集索引与非聚集索引在MySQL都是通过B+树实现的。
单列索引和联合索引
单列索引
即由一个列属性组成的索引
联合索引
即由多个列属性组成的索引
创建索引
1.对Departments表上的DepartmentName列建立唯一性索引。
2.在Employees表的Name列和Address列上建立联合索引。
删除索引
DROP INDEX idx_name_address ON Employees
创建索引的原则
一.合适创建索引的字段
1.不为 NULL 的字段
索引字段的数据应该尽量不为 NULL,因为对于数据为 NULL 的字段,数据库较难优化。如果字段频繁被查询,但又避免不了为 NULL,建议使用 0,1,true,false 这样语义较为清晰的短值或短字符作为替代。
2.被频繁查询的字段
3.被作为条件查询的字段
被作为 WHERE 条件查询的字段,应该被考虑建立索引。
4.被经常频繁用于连接的字段
经常用于连接的字段可能是一些外键列,对于外键列并不一定要建立外键,只是说该列涉及到表与表的关系。对于频繁被连接查询的字段,可以考虑建立索引,提高多表连接查询的效率。
二.不合适创建索引的字段
1.被频繁更新的字段应该慎重建立索引
虽然索引能带来查询上的效率,但是维护索引的成本也是不小的。 如果一个字段不被经常查询,反而被经常修改,那么就更不应该在这种字段上建立索引了。
2.不被经常查询的字段没有必要建立索引
简单理解为每个索引都对应着一颗 B+树,需要占用磁盘空间
3.尽可能的考虑建立联合索引而不是单列索引
如果一个表的字段过多,索引过多,那么当这个表的数据达到一个体量后,索引占用的空间也是很多的,且修改索引时,耗费的时间也是较多的。如果是联合索引,多个字段在一个索引上,那么将会节约很大磁盘空间,且修改数据的操作效率也会提升。
4.注意避免冗余索引
冗余索引指的是索引的功能相同,能够命中就肯定能命中。如(name,city )和(name )这两个索引就是冗余索引,能够命中后者的查询肯定是能够命中前者的。
5.考虑在字符串类型的字段上使用前缀索引代替普通索引
前缀索引仅限于字符串类型,较普通索引会占用更小的空间,所以可以考虑使用前缀索引带替普通索引。
使用索引一定会提高性能吗?(面试题)
大多数情况下会提高性能。首先谈谈你自己对索引的理解,然后指出:索引查询都是比全表扫描要快非常多的,但是维护索引也需要消耗一定的性能,如果数据库的数据量不大,那么使用索引也不一定能够带来很大提升。
相关文章:

MySQL数据库——索引
目录 什么是索引(Index)? 怎样加索引? 索引的特点 索引类型 主键索引(Primary Key) 辅助索引(二级索引) 聚集索引和非聚集索引 聚集索引 非聚集索引 单列索引和联合索引 单列索引 联合索引 创…...

【SpringCloud】服务注册/服务发现-Eureka
服务注册/服务发现-Eureka 1. 背景1.1 问题描述1.2 解决思路1.3 什么是注册中⼼1.4 CAP理论1.5 常⻅的注册中⼼ 2. Eureka 介绍3. 搭建Eureka Server 1. 背景 1.1 问题描述 上个章节的例⼦中可以看到, 远程调⽤时, 我们的URL是写死的 String url "http://127.0.0.1:90…...

让你的Github Profile高大时尚!
目录 前言 正文 GitHub Profile 特点: GitHub Actions 核心概念: 应用场景: RSS RSS的主要特点: 使用场景: RSS的工作原理: 关于Github Readme Card 关于Github贡献的3D图 关于个人最新博文的获取 关于代码…...

ElasticSearch备考 -- Multi match
一、题目 索引task有3个字段a、b、c,写一个查询去匹配这三个字段为mom,其中b的字段评分比a、c字段大一倍,将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询,可以考虑multi match、bool query操作。…...

滚雪球学Oracle[2.5讲]:数据库初始化配置
全文目录: 前言一、配置文件的高级参数设置1.1 open_cursors:游标打开数量限制案例演示 1.2 session_cached_cursors:会话缓存游标数量案例演示 1.3 pga_aggregate_target与sga_target:内存分配优化案例演示 二、内存管理模式的选…...

Java - Spring框架 (ios+aop)
Spring 简介 Spring框架是为了解决企业应用开发的复杂性,使用基本的JavaBean代替EJB,并提供了更多的企业应用功能,Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架。 Spring优点 Spring是一个开源的免费的框架(容器) Spring是一…...

计算机网络(十) —— IP协议详解,理解运营商和全球网络
目录 一,关于IP 1.1 什么是IP协议 1.2 前置认识 二,IP报头字段详解 三,网段划分 3.1 IP地址的构成 3.2 网段划分 3.3 子网划分 3.4 IP地址不足问题 四,公网IP和私有IP 五,理解运营商和全球网络 六ÿ…...

速速收藏!这些2024年上映的AI电影与短剧,申请加入你的国庆假期宅家计划!
2024年上映的AI电影 01 科幻惊悚电影《致命AI Afraid》 导演:克里斯韦兹上映日期:2024-08-30(美国)片长:84分钟剧情简介:Curtis一家被选中去测试一种革新性的居家设备:数字家庭助手AIA,包括各种感应设备和摄像头等,…...

23.2 prometheus为k8s做的4大适配工作
本节重点介绍 : k8s监控中的4大采集类型总结prometheus为k8s监控做的4大适配工作 k8s关注指标分析 在监控每个细分的领域时,我们都要先思考下到底需要关注哪些方面的指标。k8s中组件复杂,我们主要专注的无外乎四大块指标:容器基础资源指标…...

1、如何查看电脑已经连接上的wifi的密码?
在电脑桌面右下角的如下位置:双击打开查看当前连接上的wifi的名字:ZTE-kfdGYX-5G 按一下键盘上的win R 键, 输入【cmd】 然后,按一下【回车】。 输入netsh wlan show profile ”wifi名称” keyclear : 输入完成后,按一下回车&…...

循环链表和双向链表
一、 带尾指针的循环链表的合并 算法步骤: p存表头结点——pTa->next;Tb表头连接到Ta表尾——Ta->nextTb->next->next;释放Tb表头结点——delate Tb->next;修改指针——Tb->nextp; LinkList Connect(LinkList Ta,LinkList Tb){pTa->next; …...

【Linux庖丁解牛】—Linux基本指令(中)!
🌈个人主页:秋风起,再归来~🔥系列专栏: Linux庖丁解牛 🔖克心守己,律己则安 目录 1、rmdir与rm指令 2、man指令 3、cp指令 4、mv指令 5、cat与tac指令 6、重定向 7、more指令 8、…...

【电路笔记】-运算放大器微分器
运算放大器微分器 文章目录 运算放大器微分器1、概述2、运算放大器微分器的表示2.1 理想微分器2.2 输出公式2.3 交流分析3、实际微分器3.1 理想配置的局限性3.2 带串联电阻的伪微分器3.3 具有并联电容器的伪微分器4、总结1、概述 在我们之前关于积分器运算放大器的文章中,我们…...

【Unity踩坑】使用内购时获取Google Play license key
在Unity中使用了IAP(内购)后,需要设置Google Play license key。 这个key需要在Google Play Console中(https://play.google.com/console),找到相应的应用,在左侧“创收设置”里可以找到license…...

华为OD机试真题-数组拼接-2024年OD统一考试(E卷)
最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精选c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述 现在有多组整数数…...

【Android 14源码分析】Activity启动流程-2
忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。 – 服装…...

ubuntu 18.04 cuda 11.01 gpgpu-sim 裸机编译
1,环境 ubuntu 18.04 x86_64 cuda 11.01 gpgpu-sim master commit 90ec3399763d7c8512cfe7dc193473086c38ca38 2,预备环境 一个比较新的 ubuntu 18.04,为了迎合 cuda 11.01 的版本需求 安装如下软件: sudo apt-get instal…...

【Kubernetes】常见面试题汇总(五十二)
目录 116. K8S 集群服务暴露失败? 117.外网无法访问 K8S 集群提供的服务? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目 69-…...

o1-preview 在 IMO 2024 第一题的实测表现
相关博客:Learning to Reason with LLMs 以及 Introducing OpenAI o1-preview 测试了 IMO 2024 的第一题,OpenAI-o1-preview 的解题过程包括两部分:思考和推理。 正确答案是全体偶数,o1-preview 的 **思考方向正确,推…...

iOS--RunLoop原理
前言 曾经在写项目的时候遇到过这么一个问题。: 项目中添加了一个tableview,然后还有一个计时器,当滑动tableview的时候会阻塞计时器,你得执行这么一段代码后,计时器才能正常运行。 RunLoop.current.add(timer, for…...

并查集——从LeetCode题海中总结常见套路
目录 并查集定义 LeetCode128.最长连续序列 先去重再sort: 改进去重的方法: 参考: 并查集定义 在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查…...

深入理解作用域【JavaScript】
一、作用域的内部原理 JavaScript 的作用域机制是理解变量如何被访问和存储的重要概念。下面详细介绍作用域的内部原理,包括编译、执行、查询、嵌套和异常处理这五个步骤。 1. 编译 在 JavaScript 的执行过程中,首要的步骤是编译。尽管JavaScript是解…...

微信小程序实战教程:如何使用map组件实现地图功能
在微信小程序中,map组件是一个非常实用的功能,它可以帮助我们快速实现地图展示、定位、标注等操作。本文将详细介绍如何在微信小程序中使用map组件,带你轻松掌握地图开发技能。 一、map组件概述 map组件是微信小程序官方提供的一个地图组件…...

张雪峰谈人工智能技术应用专业的就业前景!
一、张雪峰谈人工智能技术应用专业 在教育咨询领域,张雪峰老师以其深入浅出的讲解和前瞻性的视角,为广大学子提供了宝贵的专业选择建议。对于人工智能技术应用专业,张雪峰老师通常给予高度评价,认为这是一个充满无限可能且就业前…...

机器学习课程学习周报十五
机器学习课程学习周报十五 文章目录 机器学习课程学习周报十五摘要Abstract一、机器学习部分1. 统计推断与贝叶斯推断2. GMM和EM算法补充3. 马尔可夫链蒙特卡罗法3.1 蒙特卡罗法3.2 马尔可夫链3.3 Diffusion模型中的马尔可夫链 总结 摘要 本周的学习涵盖了统计推断和贝叶斯推断…...

rabbitMq------客户端模块
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言消费者模块信道管理模块管理的字段提供的接口 信道内存管理连接管理类 前言 在RabbitMQ中,提供服务的是信道,因此在客⼾端的实现中&…...

地理定位营销与开源AI智能名片O2O商城小程序的融合与发展
摘要:本文阐述地理定位营销的概念、手段及其在商业中的应用,探讨开源AI智能名片O2O商城小程序如何与地理定位营销相结合,为企业营销带来新的机遇与挑战。 一、引言 在当今数字化营销的时代,地理定位营销已成为一种重要的营销手段…...

解决Vue应用中遇到路由刷新后出现 404 错误
解释: Vue 应用中遇到路由刷新后出现 404 错误,通常是因为 Vue 应用是个单页应用(SPA),它通过 Vue Router 管理路由,通过 HTML5 History Mode 实现页面导航无需重新加载页面。当直接访问非首页的路由或者刷…...

在window10下使用directml加速phi-3模型的一些记录
1.安装anaconda,安装python 安装torch等参考网上资料非常多 不细描述 2.参考微软官网【在windows上通过DirectML启用Pytorch文档,检查系统版本 检查gpu版本 3.参考微软官网【在windows上通过DirectML启用Pytorch】文档,安装torch_directml模…...

通信工程学习:什么是OSPF开放式最短路径优先
OSPF:开放式最短路径优先 OSPF(Open Shortest Path First,开放式最短路径优先)是一种内部网关协议(IGP),被广泛应用于计算机网络中,特别是在构建大型和复杂的网络时。以下是对OSPF的…...