`
wanxiaotao12
  • 浏览: 467609 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql索引

 
阅读更多

学习:

 

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 索引与执行计划

    ### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...

    MySQL 索引最佳实践

    ### MySQL索引最佳实践 #### 理解索引的重要性 在数据库管理中,索引是一种数据结构,用于提高查询速度。它对于开发者和数据库管理员(DBA)来说至关重要。索引选择不当可能会导致生产环境中的诸多问题。尽管索引...

    04-VIP-Mysql索引优化实战一.pdf

    MySQL索引优化是数据库性能提升的关键环节,本篇主要探讨了几个关于MySQL索引使用和优化的重要知识点。 首先,创建了一个名为`employees`的员工记录表,其中包含`id`(主键)、`name`、`age`、`position`和`hire_...

    MySQL索引类型大汇总

    MySQL 索引类型大汇总 MySQL 索引类型是数据库性能优化的关键所在。索引可以大幅度提高查询速度,提高数据库的高效运行。在 MySQL 中,索引可以分为单列索引和组合索引两种。 1. 普通索引 普通索引是最基本的索引...

    MySQL索引最佳实践

    ### MySQL索引最佳实践 #### 一、理解MySQL索引的重要性 索引是数据库性能优化中最常用也是最重要的手段之一。合理的索引设计可以显著提高查询效率,减少服务器资源的消耗。在MySQL中,索引的选择与配置对于开发...

    MySQL索引优化课件

    MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...

    MySQL索引分析和优化.pdf

    ### MySQL索引分析和优化 #### 一、索引的重要性及原理 索引在数据库管理中扮演着极其重要的角色,特别是在提高数据检索速度方面。**MySQL索引**本质上是用来加快数据检索过程的一种数据结构,类似于书籍中的目录...

    mysql索引和锁机制ppt介绍

    ### MySQL索引和锁机制详解 #### 一、索引基础 **索引定义:** 索引是MySQL中用于提高查询效率的一种数据结构。通过索引可以在数据表中快速定位到所需的数据行,大大减少不必要的全表扫描。 **索引的重要性:** 1....

    MySQL索引 使用笔记

    【MySQL索引 使用笔记】 MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的...

    由浅入深探究mysql索引结构原理、性能分析与优化

    由浅入深探究mysql索引结构原理、性能分析与优化

    mysql索引与视图的实例附答案宣贯.pdf

    mysql索引与视图实例附答案宣贯 在本篇文章中,我们将探讨 MySQL 中的索引和视图这两个重要概念,并通过实例和答案来宣贯相关知识点。 索引概念: 索引是一种数据结构,它可以提高查询的速度。索引可以创建在表上...

    MySQL索引背后的数据结构及算法原理

    ### MySQL索引背后的数据结构及算法原理 #### 数据结构及算法基础 索引在数据库中的作用至关重要,它能够显著提高数据检索的速度。正如标题所提到的,“MySQL索引背后的数据结构及算法原理”这一主题是技术面试中...

    Mysql索引数据结构.pptx

    MySQL 索引数据结构是数据库管理系统中提升查询效率的关键技术。当我们在处理查询速度较慢的 SQL 语句时,通常会考虑引入索引来优化。索引是一种特殊的数据结构,它按照一定的排序规则存储了数据表中的部分或全部...

    MySQL索引原理及慢查询优化1

    MySQL索引原理及慢查询优化是数据库管理中的重要主题,尤其是在高并发、大数据量的互联网环境中,优化查询性能对于系统的整体效能至关重要。MySQL作为广泛使用的开源关系型数据库,其索引机制和查询优化技巧是开发者...

    MySQL索引分析和优化[定义].pdf

    MySQL索引是数据库管理系统中用于加速数据检索的关键组件。它们的工作原理类似于书籍的索引,允许数据库系统快速定位和访问所需的数据,而无需遍历整个表。MySQL支持多种类型的索引,包括普通索引、唯一性索引和主键...

Global site tag (gtag.js) - Google Analytics