谈谈关于mysql索引的理解

索引

我们在学习java中用来表示数组的下标例如定义一个变量int i 这就表示一个索引,因为索引的英文单词是index,索引也可以称为是书的目录,它可以方便我们查询自己所需要的内容,通过索引我们可以快速找到自己的需求.此时引出了索引的概念,在数据库中.

关于索引的相关操作

有了索引的概念,我们就可以通过使用索引去查询我们的需求,在数据库中可以通过使用unique 和

primary key, foreign key.自动对一个表的列创建索引.当然我们也可以手动的去创建一个索引,

使用索引进行查询

当我们使用索引进行查询时,一定要确保这列有索引在进行查询,这样才会提高查询效率,如果牛头不对马尾,例如name列有索引,id列没有索引,但是你对id列进行查询,那么就跟select的效果一样,遍历整个列,时间复杂度为O(N),这个是在硬盘上的查询,时间复杂度要比在内存上复杂好几倍,所以一定要注意,在使用索引查询时.利用索引查询时可能会影响增删改的效率,可能会快也可能会慢,当然索引的利还是大于弊的.

索引的三大操作及注意事项

create index 索引名 on 表名(列);创建索引时一定要提前规划好自己的需求,对一个表中的那几列需要进行索引,可以更方便的查找,如果一个表已经创建好了,需要对有的列进行添加索引的操作,是非常危险的操作,一定要小心慎重,针对空表,数据量小的数据库进行创建索引操作,不会有太大危险,如果是数据量特别大的表,会产生大量的IO操作,直接把数据库给搞挂了.万一有一个表,没有提前创建索引,现在又有很多的数据,非加索引不可,那么我们可以重新创建一个数据库,然后将这个数据库的数据导入到新数据库中,然后切换程序访问新数据库        

drop index 索引名 on 表名.删除在数据库中不用多说,是一项特别危险的操作.所以注意事项就是要确保一般不要删除.

show index from 表名

索引背后的数据结构(B+树)

索引是特定的数据结构在硬盘中存储,索引是为了方便查询,提高查询效率,那么我们思考一下在学过的数据结构中那些数据结构可以快速查询的,那么我们可以使用B+树来作为索引的数据结构,B+树专门为数据库量身定制的数据结构,那么介绍B+树前,我们需要先了解B树,B树还可以进行优化,此时我们引出了B+树的概念,B+树也是N叉搜索树,B+树与B树的区别:B+树有N个key,划分出N个区间,例如8,15一个区间为小8的,另一个区间为8-15之间,15是这个范围的最大值,而小于8的这个区间会直接把8落下来作为该区间的最大值,8-15这个区间同理,15为最大值.并且父节点的key的值,会在下面子节点再次出现(以子结点的最大值出现),按照上述方法排序,叶子节点就构成了整个树数据的全集,B+树把叶子结点像链表一样首尾相连(类似于双向链表),此时进行"范围查询"就会特别方便

优势B+树 

1.N叉搜索树,高度比较低,此时硬盘IO次数比较少.

2.叶子结点是全集,并且用链表结构链接,非常适合范围查询.

3.B+树,所有的查询都要落到叶子结点,任何一次查询经历的IO次数和比较次数差不多,稳定.如果是B树,可能会一下找到也可能寻找多次.不稳定.

4.由于B+树,叶子结点是全集,非叶子结点不需要存储数据行,只需要存储索引列的key,使得非叶子结点消耗空间少

数据库中的表只是一个逻辑上的结构.在物理上并非一个真正意义的表,在物理意义上就是通过B+树来组织的,表中的每一行都是挂在B+树的叶子结点的,非叶子结点只需存储一个key的值,可以把这些非叶子结点的key的值存放在内存中,可以加快查询速度,减少硬盘IO次数

B树

B树是一个N叉搜索树,他的一个结点保存了N个key,就能延伸出N+1个子树,但是我们使用索引是为了方便查找,在指定范围内进行查找,每个结点可以有多个子树(树的度为N),这样就可以降低树的高度,每个结点不是只存一个key了,可以存多个key,会使树的高度降低了,每个结点的比较次数变多了,和每个结点进行比较时,先进行一次硬盘IO, 把数据读取出来,然后在内存上进行比较.目的是为了减少硬盘IO的次数(核心问题)

为什么其他的数据结构不能作为数据库索引的数据结构呢?

其中二叉搜索树和哈希表,是可以查询的.二次搜索树的时间复杂度为O(N),哈希表的时间复杂度近似O(1),但是二叉搜索树和哈希表都不适合给数据库做索引,因为二叉搜索树最大的问题就在于:储存的元素特别多,树的高度就会变得很高,那么比较的次数就会变多,如果我们是在内存中多比较两次无伤大雅,但是如果在硬盘上多进行两次比较那么是特别伤的,会进行多次IO操作,体现不出高效,而哈希表只能查询相等的情况,不能进行< > 的比较,也不可以like模糊查询,因为哈希表是通过哈希函数,将查询的key映射成数组下标的,没有等价关系key1 < key2 =>不能推出 hash(key1) < hash(key2)

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

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

相关文章

mysql 8 [HY000][1114] The table ‘/tmp/#sql4c3_3e5a0_2‘ is full

分组有个比较大的表&#xff0c;出现了临时表空间满了的情况&#xff1b; 试用该sql 语句&#xff1a; SHOW GLOBAL VARIABLES LIKE internal_tmp_mem_storage_engine; 可以看到 默认临时结果是用临时表存的&#xff0c;在mysql的my.cnt可以改临时空间的大小 但是磁盘哪有内…

【竞赛】本科阶段部分证书考试 科研竞赛 的 网站导航(算法、项目、安全、数据、科研)

【竞赛】本科阶段部分证书考试 & 科研竞赛 的 网站导航&#xff08;算法、项目、安全、数据、科研&#xff09; 文章目录 1、算法竞赛&#xff08;重点&#xff09;PAT/CSP天梯赛/蓝桥/力扣ICPC算法竞赛编程工具代码源其他 2、项目竞赛安全与数据&#xff08;重点&#xf…

5.28学习总结

java复习总结 hashcode()和equals() hashcode():在Object里这个方法是通过返回地址的整数值来生成哈希值。 equals():在Object里这个方法是通过比较他们的内存地址来确定两个对象是否相同。 运行效率&#xff1a;hashcode的时间复杂度为O(1)&#xff08;因为只要计算一次哈…

js 对象内的方法this不指向对象?js对象中this指向的问题

缘起 今天在写一个工具方法封装成对象模块导出时&#xff0c;由于成员方法内调用了其他成员方法&#xff0c;而且成员方法用了箭头函数() > 定义&#xff0c;导致使用 this.成员方法() 不能调用该成员方法&#xff0c;console.log(this)发现为 undefined。 export default {…

Vue 菜单组件开发教程

在 Vue 项目中&#xff0c;我们常常需要构建各种菜单结构。下面就来详细介绍如何基于给定的代码来开发一个菜单组件。 组件部分 一、模板部分 <template> <template v-for"item in menuTree" :key"item._id"> <el-sub-menu v-if"i…

opencv的findContours()函数

来自WaTab AI Pro 请详细解释cv2.findContours()&#xff1a; cv2.findContours() 是 OpenCV 中用于检测图像轮廓的函数。轮廓可以看作是将连续的点&#xff08;沿边界&#xff09;连接在一起的一条曲线&#xff0c;具有相同的颜色或强度。该函数常用于图像处理和计算机视觉中…

EtherCAT协议概述

EtherCAT 是由德国 BECKOFF 自动化公司于2003年提出的实时工业以太网技术。它具有高速和高数据有效率的特点&#xff0c;支持多种设备连接拓扑结构。其从站节点使用专用的控制芯片&#xff0c;主站使用标准的以太网控制器。 EtherCAT 的主要特点如下 : ①泛的适用性&#xff0c…

c++指针的*

1.*运算符 *运算符被称为间接值&#xff08;indirect value&#xff09;或者解除引用&#xff08;dereferencing&#xff09;运算符 将其应用于指针可以得到该地址处存储的值 由于 * 也有乘法的意思&#xff0c;c通过上下文来确定是乘法还是解除引用 2.如何声明和初始化指针 …

【Pandas】深入解析`pd.read_sql()`函数

【Pandas】深入解析pd.read_sql()函数 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xf…

《KAN》论文笔记

原文出处 KAN: Kolmogorov–Arnold Networks (arxiv.org)https://arxiv.org/html/2404.19756v1 论文笔记 What 《KAN: Kolmogorov–Arnold Networks》——我们提出了 KolmogorovArnold Networks (KANs) 作为多层感知器 (MLP) 的有前途的替代方案。 我们表明&#xff0c;这…

STM32简易音乐播放器(HAL库)

一、设计描述 本设计以STM32MP157A单片机为核心控制器&#xff0c;加上其他的模块一起组成基于单片机的音乐盒的整个系统&#xff0c;通过不同频率的PWM使蜂鸣器播放音乐&#xff0c;通过按键中断实现歌曲切换&#xff0c;音量调节&#xff0c;定时器中断实现播放速度调节&…

基于 HTML5 和腾讯云播放 SDK 开发的 M3U8 在线播放器

在当前的网络视频领域&#xff0c;M3U8 文件格式是一种广泛应用的流媒体播放格式&#xff0c;具有广泛的兼容性和稳定性。为了在网页上实现 M3U8 格式的在线播放&#xff0c;我们可以结合 HTML5 技术和腾讯云播放 SDK&#xff0c;快速开发一个功能强大的 M3U8 在线播放器。 体验…

kafka-生产者发送消息消费者消费消息

文章目录 1、生产者发送消息&消费者消费消息1.1、获取 kafka-console-producer.sh 的帮助信息1.2、生产者发送消息到某个主题1.3、消费主题数据 1、生产者发送消息&消费者消费消息 1.1、获取 kafka-console-producer.sh 的帮助信息 [rootlocalhost ~]# kafka-console…

16-云原生监控体系-监控 RabbitMQ-rabbitmq_exporter [部署Dashborad告警规则实战]

文章目录 1. 二进制方式部署1.1. 二进制包下载1.2. 配置1.2.1. 可用的环境变量1.2.2. 使用变量2. docker-compose 方式部署3. Metrics3.1. Global3.2. Overview3.3. Queues3.3.1 Queues - Gauge3.3.2. Queues - Counter3.4. Exchanges - Counter</

Xunsearch:实现拼音搜索和中文分词功能

首先我们需要安装xunsearch扩展库&#xff0c;参考 1、设置分词器和拼音搜索功能 在创建Xunsearch对象后&#xff0c;可以设置相应的分词器和拼音搜索功能。以下代码示例演示了如何设置分词器和拼音搜索功能&#xff1a; $index $xunsearch->index; $index->setToken…

解决SSH客户端远程连接CentOS7虚拟机时加载过慢问题

1、编辑 /etc/ssh/sshd_config 文件&#xff0c;将 useDNS 中的 yes 改为 no &#xff0c;关闭UseDNS加速&#xff1a; vi /etc/ssh/sshd_config2、重启ssh服务: systemctl restart sshd

Golang 创建第一个web项目(Gin + Gorm)

1. 写这篇博客的由来&#xff1a; 当你想使用最快的框架创建项目的时候是不是有点束手无策&#xff1f; 当你想配置数据库写 SQL 甚至不知道如何写&#xff0c;文件夹都不知道建在哪里&#xff1f; &#x1f604;因为Golang 目前并没有 JAVA 那种硬性规范&#xff0c;但是…

kafka-主题创建(主题操作的命令)

文章目录 1、topic主题操作的命令1.1、创建一个3分区1副本的主题1.1.1、获取 kafka-topics.sh 的帮助信息1.1.2、副本因子设置不能超过集群中broker的数量1.1.3、创建一个3分区1副本的主题1.1.4、查看所有主题1.1.5、查看主题详细描述 1、topic主题操作的命令 kafka发送消息会存…

巨额分红与大幅下调募资金额,小方制药注册生效半年后仍无进展

《港湾商业观察》施子夫 2022年7月1日&#xff0c;上海小方制药股份有限公司&#xff08;以下简称&#xff0c;小方制药&#xff09;递表上交所板&#xff0c;2023年9月1日公司提交了注册申请&#xff0c;并于同年12月19日获得生效。 离挂牌上市仅有一步之遥的小方制药注册生…

flutter开发实战-外接纹理texture处理图片展示

flutter开发实战-外接纹理处理图片展示 在Flutter中&#xff0c;如果你想要创建一个外接纹理的widget&#xff0c;你可以使用Texture widget。Texture widget用于显示视频或者画布&#xff08;canvas&#xff09;的内容。该组件只有唯一入参textureId 通过外接纹理的方式&…