面试问答:什么是索引?它有哪些优缺点?它的适用/不适用场景?哪些情况会造成索引失效?

文章目录

  • 🐒个人主页:信计2102罗铠威
  • 🏅JavaEE系列专栏
    • 📖前言:
    • 🎀什么是索引?(按角度答!:作用,存放位置)
    • 🐕索引的优缺点
    • 🪀索引的适用场景:
    • 🪀不适合创建索引的场景
      • 🎀哪些情况会造成索引失效?“模型数空运最快”

🐒个人主页:信计2102罗铠威

🏅JavaEE系列专栏

📖前言:

本篇博客主要总结面试中对索引的提问以及优缺点分析

🎀什么是索引?(按角度答!:作用,存放位置)

索引是一种排好序的可以快速查找数据的一种数据结构,因为在MySQL中除了对数据进行存储之外,还经常涉及到查询,所以就设计了对应的查找数据的算法,这个算法对应的就是数据库索引。它类似于字典目录一样,可以快速锁定待查找数据的位置。
索引是存储在磁盘中的,这是因为索引本身也很大,不适合存储在内存中,假设如果我们存储在内存中的话,那么每次打开数据库,都要重新生成索引吗?

🐕索引的优缺点

优点:
1)索引就像字典目录一样,可以快速定位,降低了IO次数,提高了查询效率
2)使用索引可以加快排序速度,因为索引是有序的,可以降低排序成本,降低CPU消耗
3)使用索引可以提高表与表之间的连接速度、可以提高group by 分组的效率
缺点:
1)由于索引本身需要占用一定的存储空间,会增加一定的空间上的开销
2)再从时间上考虑,如果要更新数据时,同时还有维护索引树,增加了一些时间开销,如果数据量不断增大,那么维护的索引树也会不断增大,维护索引树产生的时间开销成本也会增大

🪀索引的适用场景:

1)在表中需要频繁作为筛选条件的字段适合创建索引
2)主键会自动创建索引、外键推荐建立索引(因为可以提高表与表之间的连接速度)
3)需要进行排序的字段推荐创建索引。(因为索引已经有序,按照索引排序速度更快)
4)经常需要进行范围查询的列适合建立索引
5)经常进行统计或者进行group by 分组的字段推荐创建索引

🪀不适合创建索引的场景

1)表数据太少的表不适合创建索引,因为暴力查找就很快
2)频繁进行数据更新的表不适合创建索引,因为每次更新数据,都要动态的维护索引树,维护开销太大
3)像那些区分度不高的列不适合建立索引,像 男女列
4)像数据类型为 text 或者 bit 类型的不建议使用索引,因为text字段数据量太大了,占空间。而bit数据类型太小了,区分度不高。
5)不经常作为查询条件的列不适合创建索引,(因为用不到,查询效率不会提高,相反如果更新数据,还需要维护,增加了时间和空间的开销)

🎀哪些情况会造成索引失效?“模型数空运最快”

1)模:模糊查询会使索引失效,(只要左边有%的都不行,因为不确定第一个字符,只能进行全表查询)
2)型:数据类型如果没有对应,也会使索引失效(因为不同类型的排序方式不一样,例如字符串按字典序,数字按升序,所以查询时要类型一致保持筛选条件的排序和索引的排序一样)
3)数:如果对索引列使用函数,也会导致索引失效
4)空:如果索引列为空null ,也会导致索引失效(因为索引不存储null值)
5)运:如果对索引列进行加减乘除运算,会导致索引失效
6)最:如果联合索引的适用不符合最左前缀原则,也会导致索引失效
7)快:如果数据量太小了,MySQL预计全表查询速度比索引查询快,就不会走索引

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

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

相关文章

递归——N皇后

用递归替代多重循环 什么是N皇后: 在nn格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题等价于在nn的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一…

【SpringCloud】探索Eureka注册中心

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 文章目录 …

Protobuf基础使用

Protobuf是什么 在我们日常编写代码的过程中,经常会涉及到网络传输的部分。我们通常会在网络之间传递各种各样的请求,但是在我们日常架构之中,经常会涉及后端服务器之间的通信,通信过程中,可能传递的对象就是一个类。…

ECA-Net:用于深度卷积神经网络的高效通道注意力

摘要 arxiv.org/pdf/1910.03151.pdf 最近,通道注意机制已被证明在改善深度卷积神经网络(CNN)的性能方面具有巨大潜力。然而,大多数现有方法致力于开发更复杂的注意模块以实现更好的性能,这不可避免地会增加模型的复杂性。 为了克服性能和复杂性折衷之间的矛盾,本文提出…

【vscode打开多文件夹】

1)将文件夹添加到工作空间中 2)文件夹方式展开 3)最终效果 小技巧: 文件夹的位置不对的话,可以拖动进行调整。

Linux--动静态库的原理和使用详解

本文介绍了Linux系统中动态库与静态库的概念、原理以及使用方法。通过深入讲解动态库与静态库的区别和优劣势,帮助读者更好地理解并选择合适的库类型来进行软件开发。 动态库和静态库的概念 动态库(Dynamic Link Library,简称DLL&#xff09…

mysql5.7.19 winx64解压缩版安装配置教程

mysql5.7.19 winx64解压缩版安装配置教程 这篇文章主要为大家详细介绍了mysql5.7.19 winx64解压缩版安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 记录了mysql 5.7.19 winx64解压缩版安装教程,具体内容如下 系统环境&am…

优化金融展厅设计,细节提升客户体验与实用效能

“很赚钱”大部分公众对金融行业的第一印象,这足以见得金融行业在社会经济发展中的重要性,而为了更好的宣传和科普金融相关信息,金融展厅的设计和建设成为了重要措施,它能够充分展示金融机构的实力、品牌形象和服务优势&#xff0…

Jmeter使用BeanShell保存数据到文件

1、目的 在使用jmeter压测时,业务上下连贯,需要对一些编号进行关联操作。这里使用‘JSON提取器’将值提取出来,后面请求可以直接使用。其它业务想要使用就只能把值保存到文件,再使用文件做参数化了。 2、JSON提取器 提取请求值 提…

网站监控工具必要的功能

什么是网站监控 网站监控是持续跟踪网站在互联网上的性能和可用性,以确保其正常运行并提供良好的用户体验的过程,在当今的数字时代,一个表现良好的网站对公司的声誉至关重要,打开速度慢的网站会对用户体验产生负面影响&#xff0…

SSM(Spring+SpringMVC+MyBatis) 整合案例详细步骤

SSM 整合简介 SSM整合是指将Spring、Spring MVC和MyBatis三个开源框架结合使用,来搭建企业级Java Web应用的后端架构。每个框架在整体架构中承担不同的职责: Spring:作为核心控制层框架,负责管理对象(Bean)…

leetcode 347.前K个高频元素

题目 思路 1.统计每个数出现的次数:可以用HashMap。key为num,value为这个数出现的次数。 2.怎样返回HashMap中value最大的前k个key呢? 这里用优先队列的方法(本质是堆) 我们要维护一个小根堆。我们在堆中存储(key,…

APP信息收集思路总结(反代理,反虚拟机,反证书校验思路整理)

前言 本文是我在学习过程中的总结,希望可以被指导提议指正。 APP概况 app跟一个网站很像。 网站分为前端后端。 app就好像网站的前端一样,app不需要浏览器,而前端需要浏览器。 他们都需要服务器,也就是说,进行we…

实现登录拦截功能

1.4、实现登录拦截功能 温馨小贴士:tomcat的运行原理 当用户发起请求时,会访问我们像tomcat注册的端口,任何程序想要运行,都需要有一个线程对当前端口号进行监听,tomcat也不例外,当监听线程知道用户想要和…

kafka部署之简单密钥

一、说明 centos7.9kafka_2.13-2.7.0.tgzapache-zookeeper-3.8.0-bin.tar.gz官方文档:Apache Kafka 二、kafka配置 2.1、server.properties server.properties修改或增加如下配置 listenersSASL_PLAINTEXT://你的主机ip:9092 super.usersUser:admin authorizer…

#Linux(make工具和makefile文件以及makefile语法)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)make为编译辅助工具,解决用命令编译工程非常繁琐的问题 (2)在终端键入make即可调用make工具&#xff0…

huawei 华为 交换机 配置 LACP 模式的链路聚合示例 (交换机之间直连)

组网需求 如 图 3-22 所示, SwitchA 和 SwitchB 通过以太链路分别都连接 VLAN10 和 VLAN20 的网络,且SwitchA 和 SwitchB 之间有较大的数据流量。用户希望 SwitchA 和 SwitchB 之间能够提供较大的链路带宽来使相同VLAN 间互相通信。在两台 Switch 设备上…

Ubuntu 22.04上构建libvirt源码错误解决

当在Ubuntu 22.04上构建libvirt源码时,可能会遇到一些错误。下面是一些常见错误及其解决方法: 1. 错误:Program xmllint’未找到或不可执行 解决方法:安装libxml2-utils sudo apt-get install libxml2-utils2. 错误&#xff1a…

攻防演练利器:六款蓝队开源防御工具特点剖析

实战化的攻防演习活动一般具有时间短、任务急等特点,作为防守方,蓝队需要在日常安全运维工作的基础上,从攻击者角度出发,了解攻击者的思路与打法,并结合本单位实际网络环境、运营管理情况,制定相应的技术防…

性能测试丨GreatSQL TPC-H 性能测试报告正式发布!

1、测试背景概述 本次测试针对GreatSQL开源数据库基于标准 TPC-H 场景的测试。 TPC-H(商业智能计算测试)是美国交易处理效能委员会(TPC,TransactionProcessing Performance Council)组织制定的用来模拟决策支持类应用…