有关树的的基本知识可参考:二叉树抽象数据类型及遍历实现

(一)索引的数据结构

使用索引的原因:避免全表扫描,提高检索效率
可以作为索引:主键,唯一键

1.普通查找:

  • 二叉搜索树:有左子树和右子树
    优点:利用二叉查找;时间复杂度为O(log n)
    缺点:数据库要进行插入和删除,当对其操作后其高度可能会发生变化,时间复杂度增加,I/O访问时间增加,性能下降;
    具体代码实现可参考:二叉搜索树,平衡二叉树

二叉树主要用于组织内存中规模较小的目录,在检索过程中平均要对外存使用log2 n次访问
对于较大的外存储器上的文件,一般使用每个结点包含多个关键码的B树

  • B树:平衡多路查找树
    相关具体代码实现可参考:B-树,B+树

B树也是一种平衡多路查找树,其中树中结点的最大的孩子数目称为树的阶m

  • 树中每个结点最多有m个子树
  • 根结点最少有两个子树
  • 除了根结点以外的非叶子结点最少有m/2个子树
  • 所有叶子结点都出现在同一层
  • 其中有n+1个子树的非叶子结点的信息如下图:

B+树更适合做存储索引

  • 1.B+树的磁盘读写代价更低
    B+树内存中只有索引信息,内部结点相对小,一次性读入要查找的关键字更多
  • 2.B+树的查询效率更稳定
    所有关键字查询的长度相同,使得每个数据查询的效率几乎相同,为O(log n)
  • 3.B+树更有利于对数据库的扫描
    B+树只用遍历叶子结点即可二完成数据的查询

2.特殊索引

  • Hash索引:运用Hash函数进行定位查找
    优点:查询效率理论上较高
    缺点:

    • 仅仅能够满足”IN“,“=”,不能使用范围查询
    • 无法被用来数据的排序操作
    • 不能利用部分索引键查询
    • 不能避免表扫描
    • 遇到大量Hash值相等的情况后性能可能会下降
  • BitMap索引(位图索引):一个bit位来存放
    优点:一个叶子块可存放较多bit位来表示不同行,
    缺点:

    • 只是用与某个字段的值只有固定的几个的情况;
    • -同时,其锁力度较大,当新增或修改数据时,与其在同一位图的数据操作都会被锁住,并不适合并发较多的系统

(二)密集索引和稀疏索引

一个表只能有一个密集索引

  • 密集索引文件的每个搜索码值都对应一个索引,
  • 稀疏索引只为索引码的某些值建立索引项
    如图所示:

InnoDB:有且仅有一个密集索引

  • 若有一个主键被定义,则主键是密集索引
  • 若没有主键被定义,该表的第一个唯一非空索引作为密集索引
  • 若不满足上述条件,innoDB内部会生成一个隐藏主键(密集索引)
  • 非主键索引存储相关键位和其对应的主键值,包含两次查找

(三)索引其它问题

1.定位并优化Sql:

大致思路

  • 1.根据慢日志定位慢查询Sql
set global show_query_log=on;    //打开慢日志
set global long_query_time=1;    //设置时间
select  count(id)from  person_info_large;     //灌入数据
  • 2.使用explain等工具分析Sql:直到效率低的原因,改进查询
    explain中有type和extra关键字段,explain中的字段type:index>all(全表查询要优化):
explain select name from person_info_large  order  by  name desc;
  • 3.修改Sql或尽量让Sql走索引:
alter  table person_info_large  add index idx_name(name);    //添加索引
explain select count(id) from person_info_large force index(primary);   //强制索引

2.联合索引的最左匹配原则

  • 1.最左前缀匹配原则:mysql会一直向右匹配直到遇到范围查询(<,>,between,like)就会停止匹配,比如a=3and b=4and c>5 and d=6,如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,d,b,c)的索引则都可以用到,abd的顺序可以任意调整;
  • 2.=和in可以乱序:比如a=3and b=4and c=3建立(a,b,c)索引可以任意顺序,mysql优化器可以帮助优化索引完成识别的形式。

3.索引是越多越好吗

  • 数据量小的表不需要索引,建立会增加额外的开销
  • 数据变更也需要维护索引,因此更多的索引意味更大的维护成本
  • 更多的索引也意味更多的空间

(二)数据库索引优化相关推荐

  1. mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  2. ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  3. MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  4. 知识点:Mysql 数据库索引优化实战(4)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...

  5. Oracle学习总结(7)—— 常用的数据库索引优化语句总结

    不管是用C/C++/Java等代码编写的程序,还是SQL编写的数据库脚本,都存在一个持续优化的过程.也就是说,代码优化对于程序员来说,是一个永恒的话题. 近期,我们对之前编写的数据库脚本进行了全面的自 ...

  6. mysql 重复率高字段 索引_MySQL性能优化(二)索引优化

    一.选择合适的列建立索引 1.在where从句,group by从句,order by从句,on从句中出现的列(select) 2.索引字段越小越好(表每页数据才会更多,IO效率会更高) 3.离散度大 ...

  7. 第6章 数据库索引优化

    6-1 Btree索引和Hash索引 Btree索引--顺序存储- B-Tree索引适合Order By 联合索引 ---------------重点内容 Hash索引 -相对比较快- 等值查询 为什 ...

  8. MySQL索引(二)索引优化方案有哪些

    在上一篇文章中,我们介绍了MySQL中常见的索引类型以及每种索引的各自特点,那么这篇文章带你来与我一起看一下聚集索引与二级索引的关系,最后在附上常见的索引优化方案.首先我们还是看一下聚集索引和二级索引 ...

  9. 数据库索引优化原理,索引的工作机制

    我们通过一个简单的例子来开始教程,解释为什么我们需要数据库索引.假设我们有一个数据库表 Employee, 这个表有三个字段(列)分别是 Employee_Name.Employee_Age 和Emp ...

  10. 架构设计器_MySQL:数据库结构优化、高可用架构设计、数据库索引优化

    一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...

最新文章

  1. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据
  2. SwipeRefreshLayout 报错 dispatchTouchEvent
  3. myeclipse转maven项目
  4. HTML5 上传图片预览
  5. c语言获取dll文件路径,C语言URLDownloadToFile获取文件下载进度
  6. Juniper基础系列之一---vlan的建立
  7. 软件开发的核心问题是什么
  8. 一则JVM memory leak解决的过程
  9. 数智时代下 IT终端部署如何赋能高校构建智慧教育新模式
  10. Python入门--字符串内容对齐操作center,ljust,rjust,zfill
  11. C语言x86汇编指令理解volatile(三十五)
  12. 计算机桌面图标损坏,win7系统的电脑桌面图标受到损坏要如何修复
  13. 手机测试光纤网速的软件,如何测试光纤网速?如何测试网速多少兆
  14. 简单使用Easy Touch5摇杆控制物体移动
  15. SEO系列之站内优化
  16. 路由器信号分为2.4G和5G,有什么区别?
  17. Cortex-M0核芯片bootloader调试过程
  18. 【实践与问题解决28】最全超分辨率(SR)数据集介绍以及多方法下载链接
  19. 岁末回首,义无反顾!
  20. 2023 第一届“躺平杯”信息技术与网络安全入门赛

热门文章

  1. Linux系统安装tomcat7
  2. 苹果cms播放器html,解决苹果cmsv10版本ckplayer播放器高度自适应兼容问题
  3. 哈密顿图和欧拉图知识小结
  4. 微观经济学(第一课)笔记
  5. CAD绘图的规范要点
  6. 方正字体库大全(129款) 官方免费版​
  7. idea的tomcat改端口号_tomcat8修改端口,tomcat更改端口
  8. redies 学习笔记
  9. Windows 查看端口占用情况并关闭端口
  10. python读pdf/双层pdf