MySQL~索引的优缺点是什么?有哪些优化索引的方法?

news2024/12/28 6:10:00

1.索引的优缺点

优点:提高查询记录的速度。

缺点:

  • 需要占用空间,索引是一种用空间换时间的做法
  • 创建索引和维护索引都需要消耗时间,会降低表的增删查改效率,因为每次进行增删查改,都需要对索引进行维护,需要消耗时间

什么情况下可以使用索引?

  • 经常作为查询条件的字段,如果需要同时查找多个字段,可以建立联合索引
  • 经常放到GROUP BY或者ORDER BY后面的字段,进行GROUP BY或者ORDER BY都会对数据进行排序,这些字段就可以建立一个索引,这样就不需要每次都进行排序了

什么情况下不可以使用索引?

  • 不经常作为查询条件的字段
  • 不经常放到GROUP BY或者ORDER BY后面的字段
  • 重复率高的字段,比如性别,建立索引并不会明显提高查询效率,毕竟索引也需要占空间。
  • 表数据量很少的时候,全表查也非常快,你创建维护索引反倒需要开销。
  • 经常需要更新的字段,如果建立了索引,索引也需要频繁维护(B+树是要保证数据有序的),会影响数据更新的效率。

2.如何优化索引?

前缀索引优化:对一个字符类型的字段使用前缀索引,前缀索引指的是只为前几个字符建立索引,而不是整个字段建立索引,这样可以减小索引的大小。

  • 适用场景:对于一些字符串很长的字段可以使用前缀索引
  • 局限性:1.order by无法使用前缀索引;2.无法把前缀索引用作覆盖索引

覆盖索引优化:建立适当的联合索引,如果要查询的字段就在联合索引中,就可以避免回表,提高查询效率

主键最好是自增的:因为MySQL中索引底层采用的是B+树的结构,它会对索引进行排序

        如果主键不是自增的,插入新的记录就很可能导致页分裂的情况,导致数据页的记录需要发生移动以此来维护索引的有序性,会影响到数据的插入效率。同时也可能会导致内存空间的浪费,影响查询效率。

        如下所示:假设数据页中存有1,3,5,9的索引数据,此时数据页已满,插入索引数据7就会导致页分裂,需要移动元素,同时后续左边的数据页只有小于7的数据才能使用了,大于7的数据就无法使用。

        如果主键是自增的,每插入一条记录,在数据页中都是追加操作,一个页不够了就开辟一个新的页,就不会发生页分裂的情况,插入效率更高。同时也不会有内存空间的浪费。

索引最好是not null

        如果索引列存在null会导致MySQL更加难以优化,会影响到查询的效率(比如进行统计的时候,count会省略为null的行)。

        null虽然是空,但是需要额外的一个字节来标识这个null值,更占用空间

防止索引失效

        有时候加上了索引,但是查询的时候可能会导致索引失效,没有使用到索引,所以我们要尽量避免索引失效。

1.使用左模糊匹配或者左右模糊匹配会导致索引失效,因为索引底层是B+树实现的,索引是有序的,只能根据前缀进行比较,在前缀相等的情况下,后续的字符才是有序的。所以无法用在左模糊和左右模糊查询中。

2.对索引列进行计算,函数,类型转换等操作,会导致索引失效。

  • 对于函数和计算,索引保存的是字段原先的值,而不是计算后的值。因此计算后的值无法使用索引。
  • 对于类型转换,比如MySQL在遇到字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较,此时实际上就是对字符串的列使用了CAST 函数,所以也会导致索引失效。

3.联合索引不遵循最左匹配原则,比如建立了联合索引(a, b),查询条件为where b = 1;,此时索引失效。原因:联合索引是先根据第一列排序,再根据第二列排序。你如果无法确定第一列,第二列就是无序的,自然就无法使用索引。

4.WHERE子句中,OR前后有一个不是索引列,会导致索引失效。因为OR的含义是两者满足一个即可,所以只有一个列有索引是没有意义的,都会进行全表扫描。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/754419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nacos技术

说明:Nacos是微服务框架中的注册中心技术,可用于管理、协调微服务之间的请求,可配合Feign技术,搭建一个完整的微服务框架。 一、安装&启动 可在官网(https://nacos.io/zh-cn/)提供的下载链接&#xf…

【uni-app】自定义导航栏

【uni-app】自定义导航栏 新手刚玩uniapp进行微信小程序,甚至多端的开发。原生uniapp的导航栏,并不能满足ui的需求,所以各种查阅资料,导航栏自定义内容 整理如下: 需要修改的文件如下: 1、pages.json 修…

前端渲染模式CSR,SSR,SSG,ISR,DPR

目录 一、客户端渲染——CSR(Client Side Rendering) 二、服务器端渲染——SSR(Server Side Rendering) 三、静态站点生成——SSG(Static Site Generation) 四、增量静态生成——ISR(Increm…

ASEMI快恢复二极管MUR2080CT参数, MUR2080CT规格

编辑-Z MUR2080CT参数描述: 型号:MUR2080CT 最大峰值反向电压(VRRM):800V 最大RMS电压(VRMS):430V 最大直流阻断电压VR(DC):800V 平均整流正向电流(IF):20A 非重复峰值浪涌电流(IFSM):15…

科技赋能企业,实现数字化转型

科技是第一生产力,数字技术即科技,可以改变传统的商业模式,为各行各业注入新的活力。 推动企业数字化转型,可是实现行业的效率提升,实现跨界重组,重构产业模式,为产业格局重新赋能,最…

批发小程序怎么做

批发订货小程序功能介绍 我们的批发订货小程序是一个集订货浏览权限、一客一价、业务员端口、代客下单、订单汇总和订单打印等功能于一体的专业平台。以下是对这些功能的详细描述: 1. 订货浏览权限:我们的小程序可以为不同用户分配不同的订货浏览权限。…

山寨版 Threads登苹果下载榜第一,黑客借此分发恶意软件

最近,苹果在欧洲下架了一款假冒的Threads应用程序,有意思的是该APP吸引了大量的用户下载,最高峰时曾登录苹果下载榜第一名。 在发现该虚假APP后,苹果已经暂停了其开发者账户,随后更是将SocialKit LTD所有的应用程序全…

做PPT一定要知道这5个素材模板网站。

做PPT绝对不能错过的5个网站、PPT素材、PPT模板、PPT课件、PPT教程等全部都能免费下载,建议收藏! 菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYwNDUx 菜鸟图库网有非常丰富的免费素材,像设计类、办公类、自媒体类等素材…

DBeaver数据库管理工具安装连接PostgreSQL和DM

文章目录 1. 安装2. 连接PostgreSQL3. 连接DM83.1 下载驱动3.2 添加驱动3.3 连接3.4 创建表空间和用户3.5 执行sql 1. 安装 下载地址 https://dbeaver.io/download/ 2. 连接PostgreSQL 配置显示所有数据库 第二个勾选会显示模板数据库 点击测试连接,然后下载驱动…

Helm 安装prometheus-stack 使用local pv持久化存储数据

目录 背景: 环境准备: 1. 磁盘准备 2. 磁盘分区格式化 local storage部署 1. 节点打标签 2. 创建local pv storageClass和prometheus-pv Prometheus-stack部署 1. 下载helm chart包 2. values.yaml 参数解释 3. 部署prometheus-stack 4. 查看…

运行软件plotsr时报错:“ImportError: Incomplete genomic information”

为了对 syri.out (assembly的变异检测结果)进行可视化处理,本人选择了plotsr软件对其基因组重排现象进行可视化: (base) [hgzhonghead01 08.assembly_calling]$ plotsr --sr syri.out --genomes ../data/Sc_R64.fasta --genomes …

什么是搜索引擎?2023 年搜索引擎如何运作?

目录 什么是搜索引擎?搜索引擎的原理什么是搜索引擎爬取?什么是搜索引擎索引?什么是搜索引擎检索?什么是搜索引擎排序? 搜索引擎的目的是什么?搜索引擎如何赚钱?搜索引擎如何建立索引?网页抓取文本处理建…

全网最细,接口自动化测试-数据库操作与日志模块,一篇打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 进行接口测试时&a…

Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别

起因 因另一个TA同学问了一个问题 我抱着怀疑的心态,测试了一下 发现 varying 中的 sv_position 和 texcoord 的值再 fragment shader 阶段还真的不一样 而且 sv_position 还不是简单的 clipPos/clipPos.w 的操作 因此我自己做了一个试验: 结果还是不一…

Ext4文件系统介绍 - 实战篇

本文主要通过dd,hexdump和dumpe2fs工具分析ext4的磁盘二进制数据,加深对ext4文件系统的印象,要想理解本建议先阅读下Ext4文件系统介绍 - 理论篇_nginux的博客-CSDN博客。 磁盘超级块数据分析 根据理论篇我们知道ext4 layout中前1024字节是x…

Flask 使用Flask的session来保存用户登录状态例子

使用Python的Flask库实现的登录接口、查询金额接口和注销接口的示例。 当用户发送POST请求到/login接口时,代码会获取请求中的用户名和密码。如果用户名和密码匹配(在示例中是admin和admin123),则会将用户名保存在session中&…

Scratch 放置建筑

Scratch 放置建筑 本程序的功能是放置和删除建筑。点击鼠标时建筑会复制并从初始位置向鼠标指针移动,每次复制都更换外观,距离鼠标指针较近时停止移动并调至垂直方向,延时0.5秒。延时过后鼠标指针接触到建筑每隔0.1秒进行判断,3次…

HOT62-N皇后

leetcode原题链接:N皇后 题目描述 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返…

灵活用工服务平台是怎样的?

灵活用工服务平台是为企业提供灵活用工人员招募、管理和支付等服务的平台。这些平台通常会建立一套在线系统,帮助企业发布岗位需求,筛选和招募合适的灵活用工人员,管理他们的工作时间和报酬。 企业选择做灵活用工的原因有这些: 1…

虚幻插件Landscaping Landscaping Mapbox

虚幻插件Landscaping & Landscaping Mapbox Landscaping offers an easy way to import GIS data as single Landscape or World Composition (UE4) or World Partition (UE5) or Procedural/Static Mesh. 提供了一种非常简单的方式来导入GIS数据,可以生成Lands…