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 * ...
随机推荐
- layui-table-column-select(layui数据表格可搜索下拉框select)
layuiTableColumnSelect 在layui table的基础上对表格列进行扩展:点击单元格显示可搜索下拉列表. 码云地址:https://gitee.com/yangqianlong9 ...
- 【Autoit】Autoit 使用
一.Autoit 上传文件. 1.常用语法 - WinActivate("title") 聚焦到指定活动窗口 - ControlFocus ( "titl ...
- 03. Go 语言容器
Go语言容器(container) 变量在一定程度上能满足函数及代码要求.如果编写一些复杂算法.结构和逻辑,就需要更复杂的类型来实现.这类复杂类型一般情况下具有各种形式的存储和处理数据的功能,将它们称 ...
- 一天两道PAT(2)1005,1006
今天的pat1006没什么好说的.就记录一下1005的状况.先上题目. 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重 ...
- HDUNumber Sequence(KMP)
传送门 题目大意:b在a第一次出现的位置 题解:KMP 代码: #include<iostream> #include<cstdio> #include<cstring& ...
- 用VB脚本复制文件夹并跳过重复文件
VB中可通过 scripting.filesystemobject 对象操作文件,其中复制文件或文件夹的函数参数可选覆盖或不覆盖.选择覆盖时,如果目标路径存在同名文件或文件夹,则替换掉已存在的文件.而 ...
- vscode源码分析【三】程序的启动逻辑,性能问题的追踪
第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 启动追踪 代码文件:src\main.js 如果指定了特定的启动参 ...
- Ubuntu 16.04 安装 mujoco, mujoco_py 和 gym
Mujoco (1)官网(https://www.roboti.us/license.html)注册 license,教育邮箱注册可以免费使用一年.注意:一个邮箱账号只能供一台主机使用. 填写个人信息 ...
- IT兄弟连 Java语法教程 流程控制语句 循环结构语句4
do-while循环 Java还有一种循环是do-while.与for.while这些在循环顶部判断条件表达式的语句不同,do-while是在循环底部进行条件表达式的检查.这意味着do-while循环 ...
- Javascript模块化开发4——Grunt常用模块
一.copy 用于复制文件与目录. grunt-contrib-copy 二.eslint 检测代码的合理性. grunt-eslint 常见参数: 1.quiet 是否只显示errors.默认值fa ...