来自:苦逼的码农(微信号:di201805)

作者:帅地

个人简介:一个热爱编程的在校生,我的世界不只有coding,还有writing。目前维护订阅号「苦逼的码农」,专注于写「算法与数据结构」,「Java」,「计算机网络」。

前言

本模板主要是一些面试相关的题目,对于每一道问题,我会提供简单的解答,答案的来源主要是基于自己看了各方资料之后的理解,如果有错的,欢迎指点出来。

1、什么是最左前缀原则?

以下回答全部是基于MySQL的InnoDB引擎

例如对于下面这一张表


如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下


如果我们要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为

1select ID from table where name like '张%'

由于在B+树结构的索引中,索引项是按照索引定义里面出现的字段顺序排序的,索引在查找的时候,可以快速定位到 ID 为 100的张一,然后直接向右遍历所有开头的人,直到条件不满足为止。

也就是说,我们找到第一个满足条件的人之后,直接向右遍历就可以了,由于索引是有序的,所有满足条件的人都会聚集在一起。

而这种定位到最左边,然后向右遍历寻找,就是我们所说的最左前缀原则

2、为什么用 B+ 树做索引而不用哈希表做索引?

1、哈希表是把索引字段映射成对应的哈希码然后再存放在对应的位置,这样的话,如果我们要进行模糊查找的话,显然哈希表这种结构是不支持的,只能遍历这个表。而B+树则可以通过最左前缀原则快速找到对应的数据。

2、如果我们要进行范围查找,例如查找ID为100 ~ 400的人,哈希表同样不支持,只能遍历全表。

3、索引字段通过哈希映射成哈希码,如果很多字段都刚好映射到相同值的哈希码的话,那么形成的索引结构将会是一条很长的链表,这样的话,查找的时间就会大大增加。

3、主键索引和非主键索引有什么区别?

例如对于下面这个表(其实就是上面的表中增加了一个k字段),且ID是主键。


主键索引和非主键索引的示意图如下:


其中R代表一整行的值。

从图中不难看出,主键索引和非主键索引的区别是:非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引

根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。

1、如果查询语句是 select * from table where ID = 100,即主键查询的方式,则只需要搜索 ID 这棵 B+树。

2、如果查询语句是 select * from table where k = 1,即非主键的查询方式,则先搜索k索引树,得到ID=100,再到ID索引树搜索一次,这个过程也被称为回表。

现在,知道他们的区别了吧?

4、为什么建议使用主键自增的索引?

对于这颗主键索引的树


如果我们插入 ID = 650 的一行数据,那么直接在最右边插入就可以了


但是如果插入的是 ID = 350 的一行数据,由于 B+ 树是有序的,那么需要将下面的叶子节点进行移动,腾出位置来插入 ID = 350 的数据,这样就会比较消耗时间,如果刚好 R4 所在的数据页已经满了,需要进行页分裂操作,这样会更加糟糕。

但是,如果我们的主键是自增的,每次插入的 ID 都会比前面的大,那么我们每次只需要在后面插入就行, 不需要移动位置、分裂等操作,这样可以提高性能。也就是为什么建议使用主键自增的索引。


●编号534,输入编号直达本文

●输入m获取文章目录

推荐↓↓↓

Web开发

更多推荐25个技术类公众微信

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

mysql 右模糊_面试小知识:MySQL索引相关相关推荐

  1. redis提高查询速度_面试小点-MySQL 的两种索引方法如何提高查询速度

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 索引方法 Mysql的索引方法有两种,BTERR和HASH. 散列表(Hash Table)和B+Tre ...

  2. mysql索引级别快慢_面试小点-MySQL 的两种索引方法如何提高查询速度

    MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL 的检索速度. 索引方法 Mysql 的索引方法有两种,BTERR 和 HASH. 散列表(Hash Tabl ...

  3. mysql 分段执行_面试官问你MySQL的优化,看这篇文章就够了

    作者:zhangqh segmentfault.com/a/1190000012155267 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例 ...

  4. mysql 事务值被改变_面试被问MySQL 事务的实现原理,怎么破?

    Java面试笔试面经.Java技术每天学习一点 作者:小小木的博客 来源:https://www.cnblogs.com/wyc1994666/ 开篇 相信大家都用过事务以及了解他的特点,如原子性(A ...

  5. java面试mysql的引擎_面试官:你用过mysql哪些存储引擎,请分别展开介绍一下

    这是高级开发者面试时经常被问的问题.实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过 ...

  6. mysql 迁移方案_不同场景下 MySQL 的迁移方案

    本文内容 为什么要迁移 MySQL 迁移方案概览 MySQL 迁移实战 注意事项 技巧 总结 一.为什么要迁移 MySQL 迁移是 DBA 日常维护中的一个工作.迁移,是把实际存在的物体挪走,保证该物 ...

  7. mysql级联删除_近百道MySQL面试题和答案(2020收藏版)(完结篇)

    7. 什么是死锁?怎么解决? 死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象. 常见的解决死锁的方法 1.如果不同程序会并发存取多个表,尽量约定以相同的顺序访 ...

  8. mysql数据库二级_全国计算机二级mysql数据库模拟试题及答案

    全国计算机二级mysql数据库模拟试题及答案 很多人都想拿到二级mysql证,那么在参考二级mysql考试前,可要做好充分的准备,下面小编为大家带来了全国计算机二级mysql数据库模拟试题及答案,欢迎 ...

  9. mysql query 优化_第 8 章 MySQL 数据库 Query 的优化

    前言: 在之前"影响 MySQL 应用系统性能的相关因素"一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 Query 语句的优化 ...

  10. mysql数据库访问控制_一文总结MySQL数据库访问控制实现原理

    MySQL 访问控制实际上由两个功能模块共同组成,一个是负责"看守 MySQL 大门"的用户管理模块,另一个就是负责监控来访者每一个动作的访问控制模块.用户管理模块决定用户是否能登 ...

最新文章

  1. 【网络编程】epoll 笔记
  2. 越来越多BCH全节点客户端对BCH意味着什么?
  3. MFC CAsyncSocket类基本使用 - 1
  4. Mysql索引基本概念及案例总结(含索引的使用注意事项)
  5. c语言传入参数不正确,请高手看看一下程序怎么回事啊?老是提示传参数错误...
  6. android rsa解密前面带乱码,C#rsa解密的解出来的结果乱码
  7. 支持HTML5 SqlLite的AndroidApp
  8. 卷积神经网络CNN基本原理和相关基本概念
  9. 1656. Far Away Kingdom's Army
  10. 下载bilibili视频
  11. mysql临时表删除_MySQL如何创建和删除临时表
  12. 浅谈LANG_ISO 639-1世界语言列表检索
  13. Java应用无响应、内存飙升、CPU飙升排查
  14. ScrollView 滑动停止监听
  15. java short 写法_Java数据类型short的使用方法
  16. ubuntu上mysql端口3306无法远程连接
  17. 通过QQ音乐接口获取数据+播放源
  18. 对称加密非对称加密混合加密
  19. 时间序列分析 | Python实现Tsprial时间序列特征提取
  20. sql数据库本地服务器不显示,sql数据库本地服务器不显示

热门文章

  1. 一些老程序员不错的经验分享
  2. ASP.NET底层架构 22
  3. javaScript原型链继承
  4. lepus监控mysql慢查询_天兔(Lepus 3.8)收集MySQL慢查询
  5. ajax zlib,jQuery递增地读取Ajax流吗?
  6. dev项目属性按钮是灰色_【网页特效】11 个文本输入和 6 个按钮操作 特效库
  7. apache http自动跳转https_NGINX使用rewrite实现http 跳转 https
  8. lhdc协议是什么_无线耳机标注的编码是什么意思?看懂了会少很多坑
  9. html做换装游戏,index.html
  10. hbase put 写入数据慢_HBase运维 | HBase 疑难杂症诊治