mysql timestamp 不走索引_面试 - 要不简单聊一下你对MySQL索引的理解?

MySQL索引?这玩意儿还能简单聊?明显是在挖坑,幸好老夫早有准备,切听我一一道来。

一、索引是什么?

索引是帮助MySQL高效获取数据的数据结构。

二、索引能干什么?

索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引能够轻易将查询性能提高好几个数量级,总的来说就是可以明显的提高查询效率。

三、索引的分类?

1、从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。这里所描述的是索引存储时保存的形式,

2、从应用层次来分:普通索引,唯一索引,复合索引

3、根据中数据的物理顺序与键值的逻辑(索引)顺序关系:聚集索引,非聚集索引。

平时讲的索引类型一般是指在应用层次的划分。

就像手机分类:安卓手机,IOS手机 与 华为手机,苹果手机,OPPO手机一样。

普通索引:即一个索引只包含单个列,一个表可以有多个单列索引

唯一索引:索引列的值必须唯一,但允许有空值

复合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

聚簇索引(聚集索引):并不是一种单独的索引类型,而是一种数据存储方式。具体细节取决于不同的实现,InnoDB的聚簇索引其实就是在同一个结构中保存了B-Tree索引(技术上来说是B+Tree)和数据行。

非聚簇索引:不是聚簇索引,就是非聚簇索引

四、索引的底层实现

mysql默认存储引擎innodb只显式支持B-Tree( 从技术上来说是B+Tree)索引,对于频繁访问的表,innodb会透明建立自适应hash索引,即在B树索引基础上建立hash索引,可以显著提高查找效率,对于客户端是透明的,不可控制的,隐式的。

不谈存储引擎,只讨论实现(抽象)

Hash索引

基于哈希表实现,只有精确匹配索引所有列的查询才有效,对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),并且Hash索引将所有的哈希码存储在索引中,同时在索引表中保存指向每个数据行的指针。

9bae21a8844fd48d10ab7853d2a37045.png

B-Tree索引(MySQL使用B+Tree)

B-Tree能加快数据的访问速度,因为存储引擎不再需要进行全表扫描来获取数据,数据分布在各个节点之中。

847612a0485341ee6fb4be9f3c157fd6.png

B+Tree索引

是B-Tree的改进版本,同时也是数据库索引索引所采用的存储结构。数据都在叶子节点上,并且增加了顺序访问指针,每个叶子节点都指向相邻的叶子节点的地址。相比B-Tree来说,进行范围查找时只需要查找两个节点,进行遍历即可。而B-Tree需要获取所有节点,相比之下B+Tree效率更高。

5642ab1e7f67173e297cc7990df22fe3.png

结合存储引擎来讨论(一般默认使用B+Tree)

案例:假设有一张学生表,id为主键

idnamebirthday1Tom1996-01-012Jann1996-01-043Ray1996-01-084Michael1996-01-105Jack1996-01-136Steven1996-01-237Lily1996-01-25

在MyISAM引擎中的实现(二级索引也是这样实现的)

767097b87936186333670b2e893eba76.png

在InnoDB中的实现

4927dd9b8f3c8158ea4f60136dd937cb.png
c9ec69c2a15542a7f5b36f9eb8e37e25.png

五、为什么索引结构默认使用B+Tree,而不是Hash,二叉树,红黑树?

B+tree:因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低;

Hash:虽然可以快速定位,但是没有顺序,IO复杂度高。

二叉树:树的高度不均匀,不能自平衡,查找效率跟数据有关(树的高度),并且IO代价高。

红黑树:树的高度随着数据量增加而增加,IO代价高。

六、为什么官方建议使用自增长主键作为索引?

结合B+Tree的特点,自增主键是连续的,在插入过程中尽量减少页分裂,即使要进行页分裂,也只会分裂很少一部分。并且能减少数据的移动,每次插入都是插入到最后。总之就是减少分裂和移动的频率。

插入连续的数据:

e9abb94782a703e5f552c5f07081adcd.gif

插入非连续的数据

69172815444fa22979b3b843c6bafa78.gif

七、简单总结下

1、MySQL使用B+Tree作为索引数据结构。 2、B+Tree在新增数据时,会根据索引指定列的值对旧的B+Tree做调整。 4、从物理存储结构上说,B-Tree和B+Tree都以页(4K)来划分节点的大小,但是由于B+Tree中中间节点不存储数据,因此B+Tree能够在同样大小的节点中,存储更多的key,提高查找效率。 5、影响MySQL查找性能的主要还是磁盘IO次数,大部分是磁头移动到指定磁道的时间花费。 6、MyISAM存储引擎下索引和数据存储是分离的,InnoDB索引和数据存储在一起。 7、InnoDB存储引擎下索引的实现,(辅助索引)全部是依赖于主索引建立的(辅助索引中叶子结点存储的并不是数据的地址,还是主索引的值,因此,所有依赖于辅助索引的都是先根据辅助索引查到主索引,再根据主索引查数据的地址)。 8、由于InnoDB索引的特性,因此如果主索引不是自增的(id作主键),那么每次插入新的数据,都很可能对B+Tree的主索引进行重整,影响性能。因此,尽量以自增id作为InnoDB的主索引。

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

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

相关文章

亚马逊首家“无人超市”系统存在bug?!开业当天,记者中途换装成功骗过摄像头...

来源:大数据文摘2018年,亚马逊推出了无人便利店Amazon Go,本着“无需排队、拿完就走”的理念在当时掀起了一番热潮。两年后,亚马逊“无人购物”升级,又在西雅图开设了“Plus版无人超市”Amazon Go Grocery(…

创新是低情商的人做的

评语:这时一个有趣的思考,不算是正式的研究,但可以算是有价值的科学火花,创新本身或许就是得罪人的事情,或者要推翻别人的观点,引起他人不高兴,或者他人有不同意见,要争论和辩解&…

【12.23】转行小白历险记-算法02

不会算法的小白不是好小白,可恶还有什么可以难倒我这个美女的,不做花瓶第二天! 一、螺旋矩阵 59. 螺旋矩阵 II - 力扣(LeetCode) 1.核心思路:确定循环的路线,左闭右开循环,思路简…

MySQL 5.7.18 解压版安装

原文链接:https://my.oschina.net/u/3474266/blog/895696 我在安装免安装版的5.7.18的时候出现了问题,正好找到这个,十分感激 今天下载安装了MySQL Community Edition 5.7.18压缩版,过程中遇到了一些坑,特地写个博客记…

订单失效怎么做的_?糟了,刚发货的订单竟然被取消掉了?我该怎么办!

“叮叮!您的Newegg国际商城有新订单啦,请及时查看!”又来新订单了,赶紧打包发货!可是三天后……“尊敬的商家您好,您的订单超过72 小时未发货,系统已经自动取消该订单”。什么?订单被…

6G概念及愿景白皮书

来源:中国指挥与控制学会“本白皮书将从6G愿景、6G应用场景、6G网络性能指标、6G潜在关键技术、国际组织和各国6G研究进展等方面展开讨论,并提出加快推进我国6G研发的相关建议。”编写 | 赛迪智库无线电管理研究所 执笔 | 彭健 孙美玉 滕学强目录一、前言…

git编译安装与常见问题解决

1. 先去官网下载一个安装包 ,假设目录/APP/ido2. cd /APP/ido3. tar -zxvf git-2.7.2.tar.gz4. 安装依赖yum -y install gcc openssl openssl-devel curl curl-devel unzip perl perl-devel expat expat-devel zlib zlib-devel asciidoc xmlto gettext-devel openss…

哺乳动物亚种在物种进化中至关重要

查尔斯达尔文的《物种起源》一书来源:科技日报 图片来源:物理学家组织网据物理学家组织网18日报道,查尔斯达尔文逝世约140年后,其进化论的一个理论终获证实!英国剑桥大学科学家在18日出版的《英国皇家学会学报B卷》上撰…

window挂载到linux服务器上,在windows 7操作系统下设置挂载Linux服务器

在Windows 7操作系统下增加了很多有用的功能,只是默认没有开启而已,今天简述下一个Windows 7下的NFS功能,通过这个功能,可以让Windows 7共享Linux下面的磁盘分区或者目录数据,这个功能原理只能通过samba或者ftp来实现&…

Android属性动画完全解析(上),初识属性动画的基本用法

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补…

两位概率论顶级专家获得2020阿贝尔奖

来源:哆嗒数学网弗斯滕伯格介绍当希勒尔弗斯滕伯格(Hillel Furstenberg) 发表其早期的一篇论文时,有传言说他并非一个人,而是一群数学家的化名。该论文涵盖的思想覆盖诸多领域,真的不可能是一个人的成果吗?虽然这件事可…

清华大学计算机系教授:马少平——计算机是如何实现智能的(附直播回放)...

来源:图灵人工智能直播回放长按识别观看回放报告摘要这是一个关于人工智能的科普讲座。人工智能经过六十几年的发展,取得了很大的成果,在很多领域得到了很好的应用。那么人工智能是如何实现的?本讲座将结合一些大家熟知的实例&…

CSS图像绘制之:条纹背景(转)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>漂亮的CSS3动画进度条DEMO演示</title><style> html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,ci…

新基建专题报告:未来发展方向及重点产业分析

报告来源&#xff1a;中银证券转自&#xff1a;未来智库一、新基建以强外溢性稳增长、补短板、调结构1&#xff09;新基建以强外溢性稳增长全球经贸摩擦加剧&#xff0c;叠加海外疫情导致各国经济存在不确定性的影响下&#xff0c;外需不足&#xff0c;内需承压&#xff0c;经济…

查看网站所有会话_你能看到网站上每个产品的数据吗?

经常有群友问怎么查看网站上每一个产品的数据。查看每个产品的数据&#xff0c;有助于我们了解网站上哪个产品是热销品&#xff0c;哪个产品还需要进行优化&#xff0c;从产品层面优化提高网站整体的转化率。查看方法也很简单&#xff0c;我们还是打开Google Analytics点击左侧…

C++实现树的基本操作,界面友好,操作方便,运行流畅,运用模板

Ⅰ.说明&#xff1a;1.采用左孩子右兄弟的方式&#xff0c;转化为二叉树来实现。2.树的后根遍历与二叉树的中根遍历即有联系又有区别&#xff0c;请读者注意分析体会。Ⅱ.功能&#xff1a;1.创建树并写入数据2.先根遍历树3.计算树高4.后根遍历树5.层次遍历树6.搜索数据域为某值…

罗敏敏组建立新型脑-脑接口实现“阿凡达”式的跨鼠遥控

来源&#xff1a;中国科学杂志社人或动物个体之间的交流主要依靠感觉系统&#xff0c;比如视觉、听觉、嗅觉和触觉。2009年的科幻电影《阿凡达》展示了地球上的人可以通过脑对脑的直接信息传递&#xff0c;远程控制潘多拉星上经过基因改造的纳威人身体。近几年有研究展示可以从…

linux下的gpio转串口驱动,X-026-KERNEL-Linux gpio driver的移植之gpio range

X-026-KERNEL-Linux gpio driver的移植之gpio range作者&#xff1a;wowo 发布于&#xff1a;2017-9-27 22:27分类&#xff1a;X Project1. 前言我们在[1][2]中提到过&#xff0c;鉴于gpio的特殊性&#xff0c;pinctrl subsystem特意留了一个后门(gpio range)&#xff0c;gpio …

长文综述:从大数据中寻找复杂系统的核心变量

文章来源&#xff1a;【集智俱乐部】原文链接&#xff1a;https://mp.weixin.qq.com/s/IIliI5plz2UBUMAzVpxClw导语尽管大数据的收集越来越容易&#xff0c;但随着从微观到宏观的尺度&#xff08;scale&#xff09;变化&#xff0c;系统行为会发生非线性的变化&#xff0c;这让…

android设置主题背景为壁纸_ppt模板防早恋安全教育主题班会课件ppt,两个青春期的孩子画面为背景...

ppt模板--防早恋安全教育主题班会课件ppt这是一套防早恋安全教育主题班会课件ppt&#xff0c;共26页。PPT封面以简约的白色背景&#xff0c;五彩斑斓的地面象征孩子们丰富多彩的学生生活&#xff0c;两个青春期的孩子画面为背景&#xff0c;蓝色正体字突出主题&#xff1a;防早…