【转】数据库索引详细介绍

news2025/8/16 18:29:22

原文链接:https://blog.csdn.net/weixin_41948075/article/details/100009848

索引的定义


索引相当于一本书的目录,通过目录我们可以迅速定位书中要找的内容。MySQL中的索引也是一样,它是一种帮助MySQL高效获取数据的数据结构(树)
索引怎么实现的?为什么用B+树?

索引是数据库中一个用于排序的数据结构,用来快速查询数据库中的数据。Mysql数据库使用B+树来实现索引的。B+树的特点就是叶子节点包含了所有的关键字信息和data数据,非叶子节点只包含子节点的最大或者最小关键字,用来实现索引。

好处:既能实现快速查找,相比于B树又节约了内存空间。

Mysql数据库中的索引实现主要依赖于两个存储引擎,MyISAM和InnoDB,都是使用B+树作为索引结构。区别就是MyISAM中使用B+树的叶子节点的data域存放数据的内存地址,而InnoDB中树的叶节点data域保存了完整的数据。

建索引的优缺点


优点:大大加快对数据的查询速度
缺点:占物理空间,对数据库进行增删改的时候也要动态的维护索引。

索引的作用


♢ \color{green}{\diamondsuit}♢提高查询速度
♢ \color{blue}{\diamondsuit}♢确保数据的唯一性
♢ \color{pink}{\diamondsuit}♢可以加速表和表之间的连接,实现表和表之间的参照完整性
♢ \color{red}{\diamondsuit}♢使用分组和排序子句进行数据检索时,可以减少分组和排序的时间
♢ \color{grey}{\diamondsuit}♢全文检索字段进行搜索优化

索引如何提高查询速度呢

假如我们有如下的一张表,在没有引入索引之前,假如我们想查询表中的一条年龄为20的数据,那么几乎要遍历完整个表才能查询到这条数据;现在我们引入索引,并且以age列作为索引列来构建出一个二叉树的索引结构来,具体的构造过程是先把表中第一行的age(49)作为二叉树的头结点,然后顺序往下遍历,把小于头节点的age放到左边,大于头结点的age放到右边,表中数据遍历完以后就构造出了右图所示的二叉树索引结构。现在我们再来试着查找年龄为20的数据所需要的过程:

在这里插入图片描述
1.将age为20的数据先和头结点的49比较(20<49),所以往左边走
2.来到树形结构的第二层,继续和21比较(20<21),继续往左边走
3.来到树形结构的第三层,和20比较(20=20)查,找成功

 

加上索引以后只需三次就查找成功了,可见索引确实可以提高我们SQL的查询效率。
 

什么场景不适合创建索引


 在查询中很少使用或者是参考的列不适合创建索引。因为既然这些列很少使用到,因此有无索引,并不能提高查询速度。相反,增加了索引反而降低了系统的维护速度且增大了空间需求。
 只有很少数据值的列不适合创建索引。因为本来结果集合就相当于全表查询,因为由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索的速度。
 被定义为text, image和bit数据类型的列不适合创建索引。因为这些列的数据量要么相当大,要么取值很少。
 当修改性能远远大于检索性能时不应该创建索引。修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。
 经常插入、删除、修改的表
 不会出现在where条件中的字段不适合建立索引。


什么样的字段适合创建索引


1、表的主键、外键必须有索引;外键是唯一的,而且经常会用来查询
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;经常连接查询,需要有索引
4、经常出现在Where子句中的字段,加快判断速度,特别是大表的字段,应该建立索引,建立索引,一般用在select ……where f1 and f2 ,我们在f1或者f2上建立索引是没用的。只有两个使用联合索引才能有用
5、经常用到排序的列上,因为索引已经排序。
6、经常用在范围内搜索的列上创建索引,因为索引已经排序了,其指定的范围是连续的

简单记就是唯一、不为空、经常被查询的字段

索引的分类(数据库索引详细介绍_lucky多多的博客-CSDN博客_数据库索引)

  • 主键索引(PRIMAY KEY)
  • 唯一索引(UNIQUE)
  • 常规索引(INDEX)
  • 全文索引(FULLTEXT)

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

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

相关文章

Docker中php安装redis扩展

第一步&#xff1a;下载redis扩展压缩包 点击下载redis-5.3.7 &#xff0c;其他版本请访问&#xff1a;https://pecl.php.net/package/redis 第二步&#xff1a;加压压缩包 linux下解压&#xff1a;tar -zxvf redis-5.3.4.tgz windows下解压&#xff1a;自己学习 第三步&#…

暴雪网易事件大讨论:Web3游戏未来发展趋势

最近很多小伙伴们询问进群方式&#xff0c;希望能和NFT玩家&#xff0c;链游行家和数字艺术家们交流和学习&#xff0c;直接戳我【ID:cdf0822】就好&#xff01;文末也有联系方式&#x1f618; 11月17日下午&#xff0c;暴雪中国官方直接绕过现任代理商网易直接发布公告称&…

学生HTML个人网页作业作品 使用HTML+CSS+JavaScript个人介绍博客网站 web前端课程设计 web前端课程设计代码 web课程设计

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【考研数学】概率论与数理统计

这个知识点比较零碎。 文章目录1. 基础知识&#xff1a;连续型总体的最大似然估计法2. 解题技巧&#xff1a;随机变量函数的分布3. 解题技巧&#xff1a;几何数列求和4. 基础知识&#xff1a;切比雪夫不等式5. 基础知识&#xff1a;卡方分布&#xff0c;t分布&#xff0c;F分布…

如何深刻理解RPA?相关知识点看这里!

最近RPA大热&#xff0c;但对于RPA的理解大家都是模模糊糊的&#xff0c;那如何深刻理解呢&#xff1f;需要了解哪些知识点呢&#xff1f;这里我们简单来看看吧&#xff01; 一、RPA定义 RPA简单来说就是借助一些能够自动执行的脚本&#xff0c;以软件自动化方式实现一系列原来…

昔年邢台稻田不下万顷 国稻种芯·中国水稻节:河北谷子收获

昔年邢台稻田不下万顷 国稻种芯中国水稻节&#xff1a;河北谷子收获 新华社记者 骆学峰 摄 河北新闻网讯&#xff08;河北日报记者邢云 通讯员王聚芬&#xff09; 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三…

限制用户上传文件类型

在上传文件时&#xff0c;在表单元素中设置accept属性&#xff0c;这个属性只能与<input type"file">一起使用才生效。 accept的属性值是MIME值&#xff0c;MIME值对应的文件类型可以看这个链接 菜鸟编程-MIME类型l 例如&#xff0c;我只想要用户上传的文件是p…

【雷达干扰】基于matlab速度聚类欺骗式干扰仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

微信预约课程小程序开发_分享微信预约课程小程序的好处

不管是素质拓展还是知识培训&#xff0c;教育机构的人一多&#xff0c;只靠人工的话&#xff0c;容易发生学生约课难&#xff0c;老师排课乱等问题。这时候&#xff0c;就要借助专业的约课系统小程序的帮助啦&#xff01;小程序需自带的营销功能还能帮忙拓客&#xff0c;这下招…

APIMapper 源码解析

git 地址&#xff1a;https://gitee.com/shaokang123/api-mapper 1、ApiMapper 是什么&#xff1f; 将API请求映射到接口上&#xff0c;返回封装的JavaBean数据。所以ApiMapper包括两部分功能&#xff0c; API请求接口映射 JSON数据转JavaBean对象 2、ApiMapper 中使用的设计…

IP-Guard管控应用程序运行有哪几种方式?

有五种方式可以管控应用程序运行&#xff1a; 1、通过进程名称来禁止 管理员直接添加应用程序的名称&#xff0c;如thunder.exe&#xff0c;此时策略是通过字符串匹配的&#xff0c;如果客户端修改了应用程序名称改为thunder123.exe&#xff0c;则策略就无法生效&#xff1b;要…

跟艾文学编程 《零基础入门学Python》Jupyter Notebook安装和使用

作者&#xff1a; 艾文&#xff0c;计算机硕士学位&#xff0c;企业内训讲师和金牌面试官&#xff0c;公司资深算法专家&#xff0c;现就职BAT一线大厂。 邮箱&#xff1a; 1121025745qq.com 内容&#xff1a;跟艾文学编程《零基础入门学Python​​​​​​​》 本节内容 ● Ju…

Kotlin基础入门 - 创建、兼容一个属于自己的Kotlin项目

这应该是我年前就想记录的一个基础入门&#xff0c;但是因为一直比较忙&#xff0c;当时只是做了一个备忘草稿&#xff0c;正文就拖到了现在&#xff0c;趁着有时间&#xff0c;赶紧来帮助一下新入行的朋友… 关于为何我把这篇Blog叫做 创建、兼容一个属于自己的Kotlin项目? 主…

[附源码]计算机毕业设计JAVA面向服装集群企业的个性化定制服务系统

[附源码]计算机毕业设计JAVA面向服装集群企业的个性化定制服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

C语言:数据的存储

数据的存储首先就要说到数据的类型&#xff0c;类型决定了看待内存空间的视角。C语言的数据类型分为内置类型和外置类型。 1.内置类型 &#xff08;1&#xff09;整型数组 char&#xff08;字符型&#xff09;、short&#xff08;短整型&#xff09;、int&#xff08;整型&am…

【网络原理】应用层协议概述

1. HTTP协议 Hyper Text Transfer Protocpl&#xff08;超文本传输协议&#xff09;。允许将超文本语言&#xff08;HTML&#xff09;从web服务器传送到客户端的浏览器上。HTTP的端口号是80&#xff0c;HTTPS的端口号是443。 HTTP0.9和1.0使用的是非持续链接&#xff0c;每次…

nginx(六十五)proxy模块(六)处理上游的响应头部

一 处理上游的响应头部 重点&#xff1a; 生成了响应内容准备向客户端发送的时候,响应内容必须经过过滤模块的处理补充&#xff1a; 要关注默认行为 &#xff08;1&#xff09;禁用上游响应头对nginx的影响 ① proxy_ignore_headers 应用层如何控制nginx 背景&#xff1…

【电力系统】CJAYA算法优化光伏模型SDM参数附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Spring源码深度解析:九、bean的获取② - createBeanInstance

createBeanInstance()的流程图如下,让我们根据流程图一步一步的学习一下spring是如何创建bean的吧 一、前言 文章目录&#xff1a;Spring源码分析&#xff1a;文章目录 这篇文章应该是接着 Spring源码深度解析&#xff1a;八、bean的获取② - getSingleton 的继续分析过程。…

Eolink自动全代码注释自动上传API

目录 一、自动全代码注释 测试环境 Eolink Apikit安装 1、自建bootstrap项目用作测试 2、点击【File】->【Settings...】 3、搜索并安装【Eollink ApiKit】 4、添加eo注释 5、注释效果 二、一键上传API 1、配置服务信息 2、Server获取 3、SpaceKey获取 4、Proj…