MySQL数据库(一)索引
索引的作用是操作数据库时避免全表扫描。
索引的机制
B Tree与B+Tree索引
B(blance) 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。
- 根节点至少有两个子节点
- 每个节点有M-1个key,并且以升序排列
- 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
- 其它节点至少有M/2个子节点
下图是一个M=4 阶的B树:

可以看到B树是2-3树的一种扩展,他允许一个节点有多于2个的元素。
B树的插入及平衡化操作和2-3树很相似,这里就不介绍了。下面是往B树中依次插入
6 10 4 14 5 11 15 3 2 12 1 7 8 8 6 3 6 21 5 15 15 6 32 23 45 65 7 8 6 5 4
的演示动画:

B+树是对B树的一种变形树,它与B树的差异在于:
- 有k个子结点的结点必然有k个关键码;
- 非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
- 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。
如下图,是一个B+树:

下图是B+树的插入动画:

B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。
B+树相对于b树的优势
- B+树的磁盘读写代价更低
- B+树的查询效率跟稳定(数据都在叶子节点中)
- B+树更有利于对数据库的权标扫描
Hash索引
Hash索引的缺点
- 仅仅能满足“=”,“IN”,不能使用范围查询
- 无法对数据的排序操作
- 不能利用部分索引键查询
- 不能避免表扫描
- 遇到大量hash值相等的情况 性能低
BitMap(位图)索引
特点:
- 只适用于字段为固定的几个值
- 适用于并发较少,统计运算较多的系统
- 目前只有oracle数据库支持
索引模块
密集索引和稀疏索引的区别
- 一张表只能有一个密集索引
- 密集索引文件中的每个索引码值都对应一个索引值
- 稀疏索引文件只为索引码的某些值建立索引项
MySql数据库有两种存储引擎:InnoDB(默认)和MyISAM
对于InnoDB:
- 有且只有一一个密集索引
- 若有一个主键被定义,则该主键作为密集索引
- 若没有主键被定义,则该表的第一个唯一非空索引作为密集索引
- 若不满足以上条件,InnoDB内部会生成一个隐藏主键
- 非主键索引的存储的是 相关键位和其对应的主键值,查找是要经过两次查找。
对于MyISAM:
- MyISAM的主键索引与非主键索引存储机制相同
- MyISAM的索引与数据是分开存储的
面试题-->最左匹配原则:
1、查询时,MySQL会一直向左匹配,直到遇到范围查询(<、>、between、like)就停止匹配,比如 a=3 and b=4 and c>5 and d=6,
如果建立(a、b、c、d)顺序的索引,d是用不到索引的,如果建立(a、b、d)的索引,则都可以用到。a、b、d的顺序可以任意调整。
2、=和in可以乱序,比如a=1 and b=2 and c=3 建立(a、b、c)索引可以任意顺序。
MySQL数据库(一)索引的更多相关文章
- MySQL数据库之索引
1 引言 在没有索引的情况下,如果要寻找特定行,数据库可能要遍历整个数据库,使用索引后,数据库可以根据索引找出这一行,极大提高查询效率.本文是对MySQL数据库中索引使用的总结. 2 索引简介 索引是 ...
- 千万级MySQL数据库建立索引,提高性能的秘诀
实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化.数据表结构的优化.系统配置的优化和硬件的优化四个方面,如下图所示: SQL语句及索引的优化 SQL语句的优化 SQL语 ...
- Mysql数据库的索引原理
写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...
- MySQL数据库对象-索引
1. 概述2. 索引分类2.1 不同索引的概念2.1.1 普通索引2.1.2 唯一索引2.1.3 全文索引2.1.4 多列索引3. 索引操作3.1 普通索引3.1.1 创建表时创建普通索引3.1.2 ...
- MySQL数据库_索引_事务_优化 _锁_存储引擎_存储过程_CAP
##一.基础 ## * 插入 INSERT INTO table_name ( field1, field2,...fieldN ) ...
- MySQL数据库中索引的数据结构是什么?(B树和B+树的区别)
B树(又叫平衡多路查找树) 注意B-树就是B树,-只是一个符号. B树的性质(一颗M阶B树的特性如下) 1.定义任意非叶子结点最多只有M个儿子,且M>2: 2.根结点的儿子数为[2, M]: 3 ...
- MySQL数据库之索引、事务、存储引擎详细讲解
一.索引 1.1 索引的概念 索引是一个排序的列表,存储着索引值和这个值所对应的物理地址 无须对整个表进行扫描,通过物理地址就可以找到所需数据 (数据库索引类似书中的目录,通过目录就可以快速査找所需信 ...
- MYSQL数据库查询索引
1.查看数据库所有索引 SELECT * FROM mysql.`innodb_index_stats` a WHERE a.`database_name` = '数据库名'; 2.查看某一表索引 S ...
- 为mysql数据库建立索引
前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过 ...
- Mysql数据库建立索引的优缺点有哪些?
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 什么是索引 数据库索引好比是一本书前面的目录,能加快数据库的查询速度. 例如这样一个查询:select * ...
随机推荐
- 大数据相关概念和hdfs
大数据 概述 大数据是新处理模式才能具备更多的决策力,洞察力,流程优化能力,来适应海量高增长率,多样化的数据资产. 大数据面临的问题 怎么存储海量数据(kb,mb,gb,tb,pb,eb,zb) 怎么 ...
- 【转载】Spring学习(1)——快速入门--2019.05.19
原文地址:https://www.cnblogs.com/wmyskxz/p/8820371.html 认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念 ...
- React中循环渲染类似Vue中 的v-for
17==>循环数组 类似v-for import React, { Component } from "react"; export default class CharSh ...
- Ubuntu 18.04 安装 python 的 redis 库
安装 如果只是安装了 python2.x 或者 python3.x,直接安装即可,命令如下: pip install redis 如果是同时安装了 python2.x 和 python3.x 的,则需 ...
- [配置]VUE中通过process.env判断开发,测试和生产环境,并分环境配置不同的URL HOST
本文链接:https://blog.csdn.net/tom_wong666/article/details/89763620 Tom哥的博客博文分类和索引页面地址:https://blog.csdn ...
- Idea的Http测试支持(十二)
1. 在Tools > HTTP Client > Test RESTful Web Service 打开窗口 窗口信息如下: 2. 在Host里面填写接口请求的服务器ip地址和端口,pa ...
- [ Python入门教程 ] Python字典数据类型及基本操作
字典是Python中重要的数据类型,字典是由"键-值"对组成的集合,"键-值"对之间用逗号隔开,包含在一对花括号中.字典中的"值"通过&qu ...
- ReactNative: 使用Text文本组件
一.简言 初学RN,一切皆新.Text组件主要用于显示文本,Text组件的重要性不言而喻,无论是Web开发还是客户端开发,都离不开它.它具有响应特性,也即表现为当它被触摸时是否显示为高亮状态.在Web ...
- 深入理解ES6之解构
变量赋值的痛 对象 let o = {a:23,b:34}; let a = o.a; let b = o.b; 如上文代码,我们经常会遇到在各种场合需要获取对象中的值的场景,舒服一点的是获取单个属性 ...
- vsc 自定义快速生成vue模板
1.安装vscode 官网地址:https://code.visualstudio.com/ 2.安装一个插件,识别vue文件 插件库中搜索Vetur,下图中的第一个,点击安装,安装完成之后点击重新加 ...