java面试一日一题:讲下mysql中的索引
问题:请讲下mysql中的索引
分析:mysql中有很多索引,要对对这些索引有所掌握,还要弄清楚每种索引的本质?
回答要点:
主要从以下几点去考虑
1、索引的本质是什么
2、mysql的索引分类;
3、每种分类的依据;
mysql在日常的开发中使用非常广泛,经常会提到的一句是在进行优化的时候,要对索引进行优化,那么到达什么是索引那。
索引其实是一种数据结构,建立索引的目的是为了提高查询效率。如果没有索引那么存储在磁盘中的数据(mysql中的数据归根结底是存储在磁盘中的),就需要扫描磁盘,把磁盘中的数据挨个扫描并进行比较,判断是否为需要的数据,为了提高查询的效率,增加一个索引的数据结构,在查找数据的时候先通过读取索引,找到要查找数据的主键或数据地址,然后根据找到的主键或数据地址去硬盘定位数据,这样比直接扫描磁盘要快很多。
mysql中,myIsam和nnodb两种数据引擎,底层的索引结构都是B+树。
从数据和索引是否在一起可以分为聚集索引和非聚集索引。
聚集索引
聚集索引,索引记录和数据存储在一起,inndob引擎下的主键索引便是聚集索引,其索引树的叶子节点存储的是主键和对应的行记录
非聚集索引
非聚集索引,当时是索引记录和数据是分开存储的,myIsam引擎下的索引都是非聚集索引,其索引树的叶子节点存储的是索引列和对应数据行的地址;要查询数据首先通过索引树找到对应的数据地址,然后根据地址进行查询;
innodb下的非主键索引不严格意义上来说也可以算作非聚集索引,因为非主键索引的叶子节点存储的是索引列和主键值,这里的主键值可以看作是数据地址;
从索引列是否为主键可以分为主键索引和普通索引
主键索引
主键索引,以主键建立的索引树,在inndob下必须要有主键索引,也就是必须要有主键,在建表时最好设置主键,在不设置主键的情况下,mysql会选择一个唯一性的列作为主键,如果没有唯一列则会默认生成一个自增的row_id作为主键,也就是说inndob的表肯定有主键索引,因为主键索引的叶子节点存储的是对应的行记录且仅有一份,没有主键索引就没有数据。
普通索引
普通索引,非主键的索引都叫普通索引,可以分为单列索引和联合索引(多列索引),单列索引就是一个列建立的索引;联合索引就是多个列组成的索引,联合索引就涉及索引的最左匹配原则。普通索引的叶子节点存储的是索引列和对应的主键值。在命中普通索引的情况下,找到主键值后,需要根据主键值再查找主键索引方可查询到对应的数据,而命中主键索引时则可以直接查找到数据,所以主键索引查询效率一般较高。
上面说到了索引的分类及优点,最大的优点就是提高查询效率,但也不是索引越多越好,因为索引作为一种数据结构也是要占磁盘空间的,在更新、插入、删除数据的同时也要维护索引结构会耗费时间,不能为了提高查询效率而牺牲更新操作的效率,需要合理的设置每张表的索引数量,一般5--6个为最好。

java面试一日一题:讲下mysql中的索引的更多相关文章
- java面试一日一题:讲下mysql中的undolog
问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...
- java面试一日一题:讲下在什么情况下会发生类加载
问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...
- java面试一日一题:mysql中常用的存储引擎有哪些?
问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...
- java面试一日一题:mysql中的自增主键
问题:请讲下mysql中的自增主键 分析:该问题主要考察对mysql中自增主键的掌握,使用场景及如何设置 回答要点: 主要从以下几点去考虑 1.什么自增主键 2.使用场景是什么: 3.innodb_a ...
- java面试一日一题:java中垃圾回收算法有哪些
问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...
- java面试一日一题:java中的垃圾回收器
问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...
- java面试一日一题:binlog undolog redolog的区别
问题:请讲下mysql中binlog.undolog.redolog三种日志的区别 分析:mysql中这三种日志很常见,也是面试中涉及比较多的方面,要理解清楚这三种日志的定位及区别: 回答要点: 主要 ...
- java面试一日一题:请讲下对mysql的理解
问题:请讲下对mysql的理解 分析:该问题主要考察对mysql的理解,基本概念及sql的执行流程 回答要点: 主要从以下几点去考虑, 1.mysql的整体架构? 2.mysql中每一个组件的作用? ...
- java面试一日一题:mysql事务是如何实现的
问题:请讲下mysql的事务是如何实现的 分析:该问题主要考察对事务的理解及实现方式: 回答要点: 主要从以下几点去考虑, 1.对事务的概念的理解? 2.事务的实现方式? 讲到mysql的事务,很快可 ...
随机推荐
- Hyperf-JsonRpc使用
Hyperf-JsonRpc使用 标签(空格分隔): php 安装扩展包 composer require hyperf/json-rpc composer require hyperf/rpc-se ...
- 《C++ Primer》笔记 第2章 变量和基本类型
如果你的数值超过了int表示范围,选用long long 如果你需要使用一个不大的整数,那么明确指定它的类型是signed char或者unsigned char 执行浮点数运算选用double 当一 ...
- OAID 文档与获取DemoAPK
OAID 查看器 接入 OAID SDK 的 Demo 工程 完整项目地址 Github 文档与 Demo 下载 release 提供 APK 下载 支持设备见 说明文档 常见问题见 F&Q文 ...
- 《深入浅出WPF》-刘铁猛学习笔记——XAML
XAML是什么? XAML是微软公司创造的一种开发语言,XAML的全称是 Extensible Application Markup Language,即可拓展应用程序标记语言. 它由XML拓展而来, ...
- 盘点Excel中的那些有趣的“bug”
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. Excel 1.0早在1985年正式进入市场,距今已经有36年了,虽然在推出 ...
- 设计模式系列之原型模式(Prototype Pattern)——对象的克隆
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- CVE-2017-10271 XMLDecoder 反序列化
漏洞描述:WebLogic的 WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,可以构造请求对运行 ...
- PicGo 图床配置【工具篇】
Github图床(舍弃) step1 下载PicGo 下载链接: https://github.com/Molunerfinn/picgo/releases step2 新建仓库作为上传图片的目标地址 ...
- 在ASP.NET Core中用HttpClient(三)——发送HTTP PATCH请求
在前面的两篇文章中,我们讨论了很多关于使用HttpClient进行CRUD操作的基础知识.如果你已经读过它们,你就知道如何使用HttpClient从API中获取数据,并使用HttpClient发送PO ...
- ASP.NET Core与Redis搭建一个简易分布式缓存
本文主要介绍了缓存的概念,以及如何在服务器内存中存储内容.今天的目标是利用IDistributedCache来做一些分布式缓存,这样我们就可以横向扩展我们的web应用程序. 在本教程中,我将使用Re ...