高性能的MySQL(5)创建高性能的索引一B-Tree索引

一、索引的类型

MySQL中,索引是在存储引擎层实现的,而不是服务器层,所以没有统一的标准。

MySQL支持的索引类型如下:

1、B-Tree索引(也包括B+Tree索引,统称为B-Tree索引,只是数据结构上的不同,特性上是一样的)

使用B-Tree数据结构来存储数据,实际上很有存储引擎使用的是B+Tree。关于BTree、B-Tree、B+Tree的区别请看本博客的附件。

InnoDB就是使用的B+Tree索引。

B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子页到跟的距离相同。

B-Tree对索引列是顺序组织存储的,所以很适合查找范围数据。

B-Tree索引适合用于全键值、键值范围或键前缀查找,其中键前缀查找只适合用于根据最左前缀查找。

举例说明:

数据如下:

a、全值匹配

对索引中的所有列进行匹配,必须按索引定义的顺序,比如:

时间: 2024-12-22 10:17:59

高性能的MySQL(5)创建高性能的索引一B-Tree索引的相关文章

Oracle B*tree索引和Oracle Bitmap索引有什么区别

(1) 建立B*tree索引 3:11:08 SQL>create index emp1_job_ind on emp1(job); (2)分析索引结构 3:11:08 SQL> ANALYZE INDEX EMP1_JOB_IND VALIDATE STRUCTURE; Index analyzed. (3)查看索引存储信息 03:11:41 SQL> SELECT BLEVEL,LEAF_BLOCKS,NUM_ROWS FROM USER_INDEXES 03:12:12   2  

高性能的MySQL(5)创建高性能的索引一哈希索引

哈希索引(hash index)基于哈希表实现,只有精确匹配索引的所有列的查询才有效,对于每一行数据,存储引擎都会对所有索引列计算一个哈希码,不同键值的行计算出来的哈希码也不一样,哈希码保存在哈希索引中,同时哈希表中保存指向每个数据的指针. 1.Memory引擎支持哈希索引,也支持B-Tree索引,而且支持非唯一的哈希索引,如果多个列的哈希值相同,索引会以链表的方式存放多个记录指针到同一个哈希条目,这个是和特别的. 举例说明: CREATE TABLE `testhash` ( `fname`

高性能的MySQL(5)索引策略-索引案例分析

理解索引最好的办法是结合实例,接下来分析一个例子. 假设要设计一个在线约会网站,用户信息表有很多列,包括国家,地区,城市,性别,眼睛颜色等等.网站必须支持上面的各种组合来搜索用户,包括根据用户的最后在线时间,评分等进行排序的限制. 需要考虑是需要索引来排序还是先检索数据再排序,因为使用索引排序会严格限制索引和查询的设计.如果MySQL使用了某个索引的范围查询,也就无法再使用另一个索引或者是该索引的后续字段进行排序了.接下来一步步讨论: 1.支持多种过滤条件 country列的选择性通常不高,但是

高性能的MySQL(5)索引策略-索引和表的维护

维护表有三个主要的目的: 1.找到并修复损坏的表. 对于MyISAM存储引擎来说,表损坏通常是系统崩溃导致的.其他的引擎也会由于硬件的问题,MySQL本身的缺陷或者操作系统的问题导致索引的损坏. 损坏的索引,会导致查询返回错误的结果或者莫须有的主键冲突等问题,严重时还会导致数据库崩溃. 这类情况,可以尝试check table来检查是否发生了表损坏,有些存储引擎不支持这个命令. 可以使用repair table 来修复损坏的表,但同样不是所有引擎都支持该命令. 如果引擎不支持,可以使用alter

高性能的MySQL(5)索引策略-覆盖索引与索引排序

一.覆盖索引 索引是一种查找数据的高效方式,但是MySQL也可以使用索引来直接获取列的数据,这样就不再需要读取数据行.如果索引的叶子节点中已经包含要查询的数据,那么还有什么必要回表查询呢? 如果一个索引包含或者说覆盖所有需要查询的字段的值,我们就称之为"覆盖索引". 覆盖索引的好处: 1.索引条目通常远小于数据行大小,所以如果只需要读取索引,就极大的减少数据访问量.这对MyISAM尤其正确,因为MyISAM能压缩索引以变得更小. 2.因为索引是按照顺序存储的,所以对于I/O密集型的范围

高性能的MySQL(5)索引策略

一.索引的优点 1.索引可以大大减少服务器需要扫描的数据量 2.索引可以帮助服务器避免排序和临时表. 3.索引可以将随即I/O变为顺序I/O 二.索引策略 1.独立的列 独立的列是指索引列不能是表达式的一部分,也不能是函数参数.例如: 一个有500W条记录的表,id是主键. 所以要始终将索引列单独放在比较符号的一侧. 2.前缀索引和索引选择性 对于比较大的列,通常可以索引开始的部分字符,这样可以节约索引空间,提高索引率.但是也会降低索引的选择性. 索引的选择性是指,不重复的索引值(基数)和表的记

【转载】低成本和高性能的MySQL云数据库的实现淘宝 MySQL

低成本和高性能的MySQL云数据库的实现 作者: 鸣嵩/曹伟(集团技术专家) 本文刊登于<程序员>杂志2012年12期上,转载请注明         UMP(Unified MySQL Platform)系统是淘宝核心系统数据库团队开发的低成本和高性能的MySQL云数据方案,关键模块采用Erlang语言实现.系统中包含了controller服务器.proxy服务器.agent服务器.API/Web服务器.日志分析服务器.信息统计服务器等组件,并且依赖于Mnesia.LVS.RabbitMQ.Z

mysql大内存高性能优化方案

8G内存下MySQL的优化 按照下面的设置试试看: key_buffer = 3840M max_allowed_packet = 16M table_cache = 1024 sort_buffer_size = 32M read_buffer_size = 32M read_rnd_buffer_size = 32M myisam_sort_buffer_size = 256M thread_cache_size = 32 query_cache_size = 256M # Try numb

高性能的MySQL(6)查询慢与重构查询

只有好的库表结构.合理的索引还不够,我们还需要合理的设计查询,齐头并进,一个不少才能充分发挥MySQL的优势. 一.查询为什么会慢? 每一个查询由一系列的子任务组成,每个子任务都会消耗一定的时间.这个我们在之前的单个查询分析时已经简单介绍了,当然还有额外的因素,比方说包括网络,CPU计算,统计信息,执行计划,锁等待等操作,或者底层引擎在调用内存,CPU操作,I/O操作等上的消耗时间. 优化查询的目的就是减少和消除这些操作所花费的时间. 查询性能低下的最基本原因是访问的数据太多,大部分的性能低下的