高性能MySql阅读笔记第五章--创建高性能的索引1

创建高性能的索引1

索引是存储引擎用于快速找到记录的一种数据结构,这是索引的基本功能。

索引对于良好的性能非常重要。

索引优化应该是对查询性能优化最有效的手段了,索引能够轻易将查询性能提高几个数量级,“最优”的索引有时比一个“好的”索引性能好两个数量级,创建一个真正“最优”的索引经常需要重写查询。

一、索引的类型

1.B树索引

当人们谈论索引的时候,如果没有特别指明类型,那么多半说的是B树索引,他使用B树数据结构存储数据。

可以使用B树索引的查询类型:全值匹配、匹配最左前缀、匹配列前缀、匹配范围值、精确匹配一列并范围匹配另一列、只访问索引的查询。

B数树索引的限制:如果不是按照索引的最左列开始查找,则无法使用索引、不能跳过索引中的列、如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化查询。

2.哈希索引

在MySql中,只有Memory引擎显示支持哈希索引。

哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。

哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序。

哈希索引也不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的。

哈希索引只支持等值比较查询。

访问哈希索引的数据非常快,除非有很多哈希冲突。

如果哈希冲突很多的话,一些索引维护操作的代价也会很高。

InnoDB引擎有一个特殊的功能叫做“自适应哈希索引”,当InnoDB注意到某些索引值被使用的非常频繁时,他会在内存中基于B树索引之上再创建一个哈希索引。

如果存储引擎不支持哈希索引,可以模拟像InnoDB一样创建哈希索引,这可以享受一些哈希索引的便利,例如只需要很小的索引就可以为超长的键创建索引。

3.空间数据索引(R树)

MyISAM表支持空间索引,可以用作地理数据存储。

4.全文索引

全文索引是一种特殊类型的索引,他查找的是文本中的关键词,而不是比较索引中的值。在相同的列上同时创建全文索引和基于值的B树索引不会有冲突,全文索引适用于MATCH AGAINST 操作,而不是普通的WHERE条件操作。

5.其他索引类别

还有很多第三方的存储引擎使用不同类型的数据结构来存储索引,例如TokuDB使用分形树索引(fractal tree index)。

二、索引的优点

索引可以让服务器快速地定位到表的指定位置。但是这并不是索引的唯一作用。

1.索引大大减少了服务器需要扫描的数据量。

2.索引可以帮助服务器避免排序和临时表。

3.索引可以将随机I/O变为顺序I/O。

时间: 2024-11-05 03:41:56

高性能MySql阅读笔记第五章--创建高性能的索引1的相关文章

第五章:创建高性能索引(上)

索引是存储引擎用于快速找到记录的一种数据结构,这也是索引的基本功能.在MySQL中也叫"键key".良好的性能少不了索引.换句话说,索引优化能够将查询性能轻松提高几个数量级. 1. 索引基础 select first_name from actor where actor_id = 5; 运行上面的查询:如果在actor_id列上有索引,MySQL将使用该索引去查找actor_id为5的列,也就是说:MySQL先在索引上按值查找,然后返回包含该值的数据行. 索引可以包含一个或多个列,列

高性能MySQL-第五章创建高性能的索引(2)

高性能的索引策略 一.独立的列 如果查询中的列不是独立的,则MySQL就不会使用索引.“独立的列”是指索引列不能是表达式的一部分,也不能是函数的函数. 二.前缀索引和索引选择性 索引部分字符会降低索引的选择性,索引的选择性是指,不重复的索引值(也称为基数,cardinality)和数据表的记录总数(#T)的比值,范围从1/#T到1之间.索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行.唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的. 一般情况下

高性能MySQL-第五章创建高性能的索引(1)

在MySQL中,存储引擎使用索引,其先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行. 索引可以包含一个或多个列的值. 一.索引的类型 在MySQL中,索引是在存储引擎层而不是服务器层实现的. MySQL支持的索引类型 B-Tree索引 InnoDB使用的是B+Tree. B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同.B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点开始进行搜索.根节

第13章 MySQL服务器的状态--高性能MySQL学习笔记

13.1 系统变量 -- 服务器配置变量 MySQL通过SHOW VARIABLES  SQL命令显示许多系统变量. 13.2 状态变量--SHOW STATUS SHOW STATUS 命令会在一个由两列(名称/值)组成的表格里显示服务器状态变量.这些变量都是只读的. SHOW STATUS默认显示会话变量,SHOW GLOBAL STATUS显示全局变量. 也可以从INFORMATION_SCHEMA.GLOBAL_STATUS和INFORMATION_SCHEMA.SESSION_STAT

mysql学习笔记 第五天

使用分区数据表: 分区数据表和merge数据表具有相似的作用,但是分区数据表确确实实是一个数据表 ,不像merge是列出数据表的逻辑关系,并且分区数据表可以包括像myisam以外的 的数据表.创建分区数据表: create table 里给出数据列和索引,然后用partition by 定义一个用来把数据行分配 到各个分区的分区函数:[将数据表分成四个区] create table log_partition( dt datetime not null, info varchar(100) no

人月神话阅读笔记—第三章

人月神话阅读笔记-第三章 一个由一流人才组成的小型的精干的队伍比由一群平庸的程序员组成的大型团队更有效率,但是这里面有一个重要的问题:如何在有意义的进度安排内创建大型的系统. 优秀的程序员和较差的程序员之间生产效率的差距是巨大的,当一个10人的精干团队进行开发,和一个100个人的平庸程序员进行开发,前者的效率更高.但是对于效率和概念的完成性来说,最好由少数干练人员开发,而大型系统需要大量人员进行开发,但是这两者是有矛盾的,需要进行平衡. 在开发过程中,可以使用一种崭新的开发方案,类似于外科医生做

C++PRIMER 阅读笔记 第三章

本章主要介绍 string vector 和 bitset, 不能贪多,现在本文主要介绍 string 与 vector 头文件中最好不要使用namespace std, 因为头文件会直接被预处理器放置到C中 std::string 的构造方式: string s1; string s2(s1); string s3("value");string s4(n,'c');           第三种构造方式可有"\0"? cout 与 cin 可以直接操作string

Hadoop阅读笔记(五)——重返Hadoop目录结构

常言道:男人是视觉动物.我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物.某些场合(比如面试.初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型.所以,第一眼,先走外貌协会的路线,打量一番,再通过望闻问切等各种手段获取关于你的大量信息(如谈吐.举止等),以快速建立起对于你的认识. 待人接物如此,搞技术也不例外,起码我是这样的.把玩了一番Hadoop的MapReduce过程,单词计数.去重.单表关联等运行的时候控制台打印出各种我看懂看不懂的信息,有了这些视

构建之法阅读笔记05-第六章

阅读笔记 第六章:敏捷流程 第六章敏捷流程主要介绍了什么是敏捷流程及其原则,还有什么时候可以选择敏捷的开发方法,什么时候选择其他方法. 敏捷的流程是指一系列价值观和方法论的集合.介绍了一些敏捷开发原则,比如,经常发布可用的软件,业务人员和开发人员在项目开发过程中应该每天共同工作,面对面的交流始终是最有效的沟通方式,不断关注技术和设计,保持简明,团队要学会自我管理,时时总结如何提高团队效率,并付诸行动. 敏捷流程的方法论---Scrum方法论.首先第一步需要找出完成产品需要做的事情,然后决定当前的