学习:
B-Tree:B即Balanced,平衡, 大量数据查找时,由树的高度决定
B+Tree:
增加了顺序访问指针,
所有关键字都在叶子节点中出现,非叶子节点作为叶子节点的索引,B+Tree总是到叶子节点才命中
B*Tree:非叶子节点也有链表
红黑树:有序的平衡二叉树
1、索引
索引是存储引擎用于快速找到记录的一种数据结构
当数据量大时, 索引对性能影响更大
2、索引像一本书的目录部分
select first_name from actor where actor_id=5;
a、先在目录中查找actor_id为5的物理地址,
b、从数据文件中, 找出物理地址对应的行
3、索引的类型
分为单列索引、多列的复合索引(最左前缀原则)
B-Tree
B+Tree:每个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历
InnoDB使用B+Tree
MyISAM使用前缀压缩技术使用得索引更小, InnoDB按照原数据格式进行存储
MyISAM索引通过数据的物理位置引用被索引的行,InnoDB根据主键被索引的行
B-Tree所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同
非叶子节点指定其子节点,叶子节点指针指向被索引的数据,
树的深度与表的大小有关
B-Tree对索引是顺序存储的, 所以适合查找范围数据, 排序操作(order by)
4、B-Tree索引查询类型
全值匹配:和索引中的所有列都匹配
匹配最左前缀:如查找索引的第一列
匹配列前缀:匹配某一列的前几个字符
匹配范围值:某一列的范围值
精确匹配某一列并范围匹配另一列:
只访问索引的查询:只需访问索引,不需要访问数据行
B-Tree索引的限制:
如果不是按索引最左列开始查找,则无法使用索引
不能跳过索引中的列, InnoDB没有限制(可以跳过某一列)
如果查询中有某个列的范围查询,则右边所有列都无法使用索引优化查找,InnoDB没有限制
5、索引策略
a、独立索引列:
索引列不能使用表达式, 也不能使用函数
b、前缀索引和索引选择性:
如果索引列字符很长,可以索引列的开始部分字符,节省索引空间,提高索引效率, 这样会降低索引的选择性
索引的选择性:不重复的索引值和数据表的记录总数的比值。索引的选择性越高,则查询效率越高,因为选择性高的索引在查找时过滤掉更多的行。唯一索引的选择性是1,这是最好的选择性,性能也是最好的。
c、多列索引
多个索引做相交操作(AND操作)时, 建立多个列的复合索引,而不是多个独立的单列索引
多个索引做联合操作(通常多个OR条件),
d、选择合适的索引列顺序
如果不用考虑排序和分组时, 将选择性最高的列放在前面通常是最好的
e、聚簇索引
不是一种单独的索引类型,而是一种数据存储方式,具体的细节依赖于其实现方式,但InnoDB的聚簇索引实际上有同一个结构中保存了B-Tree索引和数据行
f、覆盖索引
使用索引直接获取列的数据,这样就不用读取数据行
explain的Exctra列可以看到:Using index
g、使用索引扫描来做排序
6、查询性能优化
查询性能低下的最基本原因:访问的数据太多
大部分性能低下的查询可以通过减少访问的的方式进行优化
7、分析步骤
a、确认应用程序是否在检索大量不需要的数据, 太多的行, 太多的列
查询不需要的记录
多表关联时, 返回全部列
重复查询相同的数据:可以使用缓存
b、确认Mysql服务器层是否在分析大量超过需要的数据行
8、查询开销的3个指标, 这3个指标都会记录到慢日志中
响应时间
扫描的行数
返回的行数
9、重构查询
一个复杂查询还是多个简单查询
切分查询:将大的数据行, 分成多次查询
分解关联查询
10、查询执行的基础
查询缓存
解析器-解析树
查询优化器
查询执行计划
舍近求远执行引擎
11、优化特定类型的查询
count(1), count(某一列名), count(*)是一样的, 都是统计所有结果行:使用统计表, 缓存
相关推荐
### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...
### MySQL索引最佳实践 #### 理解索引的重要性 在数据库管理中,索引是一种数据结构,用于提高查询速度。它对于开发者和数据库管理员(DBA)来说至关重要。索引选择不当可能会导致生产环境中的诸多问题。尽管索引...
MySQL索引优化是数据库性能提升的关键环节,本篇主要探讨了几个关于MySQL索引使用和优化的重要知识点。 首先,创建了一个名为`employees`的员工记录表,其中包含`id`(主键)、`name`、`age`、`position`和`hire_...
MySQL 索引类型大汇总 MySQL 索引类型是数据库性能优化的关键所在。索引可以大幅度提高查询速度,提高数据库的高效运行。在 MySQL 中,索引可以分为单列索引和组合索引两种。 1. 普通索引 普通索引是最基本的索引...
### MySQL索引最佳实践 #### 一、理解MySQL索引的重要性 索引是数据库性能优化中最常用也是最重要的手段之一。合理的索引设计可以显著提高查询效率,减少服务器资源的消耗。在MySQL中,索引的选择与配置对于开发...
MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...
### MySQL索引分析和优化 #### 一、索引的重要性及原理 索引在数据库管理中扮演着极其重要的角色,特别是在提高数据检索速度方面。**MySQL索引**本质上是用来加快数据检索过程的一种数据结构,类似于书籍中的目录...
### MySQL索引和锁机制详解 #### 一、索引基础 **索引定义:** 索引是MySQL中用于提高查询效率的一种数据结构。通过索引可以在数据表中快速定位到所需的数据行,大大减少不必要的全表扫描。 **索引的重要性:** 1....
【MySQL索引 使用笔记】 MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的...
由浅入深探究mysql索引结构原理、性能分析与优化
mysql索引与视图实例附答案宣贯 在本篇文章中,我们将探讨 MySQL 中的索引和视图这两个重要概念,并通过实例和答案来宣贯相关知识点。 索引概念: 索引是一种数据结构,它可以提高查询的速度。索引可以创建在表上...
### MySQL索引背后的数据结构及算法原理 #### 数据结构及算法基础 索引在数据库中的作用至关重要,它能够显著提高数据检索的速度。正如标题所提到的,“MySQL索引背后的数据结构及算法原理”这一主题是技术面试中...
MySQL 索引数据结构是数据库管理系统中提升查询效率的关键技术。当我们在处理查询速度较慢的 SQL 语句时,通常会考虑引入索引来优化。索引是一种特殊的数据结构,它按照一定的排序规则存储了数据表中的部分或全部...
MySQL索引原理及慢查询优化是数据库管理中的重要主题,尤其是在高并发、大数据量的互联网环境中,优化查询性能对于系统的整体效能至关重要。MySQL作为广泛使用的开源关系型数据库,其索引机制和查询优化技巧是开发者...
MySQL索引是数据库管理系统中用于加速数据检索的关键组件。它们的工作原理类似于书籍的索引,允许数据库系统快速定位和访问所需的数据,而无需遍历整个表。MySQL支持多种类型的索引,包括普通索引、唯一性索引和主键...