找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4407|回复: 0

MySQL索引分类

[复制链接]
发表于 2012-2-13 14:36:26 | 显示全部楼层 |阅读模式
索引(index)是帮助MySQL高效获取数据的数据结构,是现实中性能问题的首要问题。
索引类型
B-Tree索引
B-Tree意味着数据存储是有序的,并且每个叶子页到根的距离是一样的。B-Tree索引加速了数据访问,因为存储引擎不会扫描整个表得到需要的数据。而是从根节点开始进行树查找。因为B-Tree按顺序保存了索引的列,它们对于搜索范围数据很有用。
能使用B-Tree索引的查询类型
B-Tree索引能很好地用于全键值、键值范围或键前缀查找。
B-Tree索引的一些局限
如果查找没有从索引列的最左边开始,他就没有用处。
不能跳过索引中的列。
存储引擎不能优化访问任何在第一个范围条件右边的列。
哈希索引(Memory引擎)
哈希索引建立在哈希表的基础上,它只对使用了索引中的每一列的精确查找有用。对于每一行,存储引擎计算出了被索引列的哈希码,它是一个比较小的值,并且有可能和其它行的哈希码相同。它把哈希码保存在索引中,并且保存了一个指向哈希表中每一行的指针。
哈希索引的一些局限
因为索引只包含了哈希码和行指针,而不是值自身,MySQL不能使用索引中的值来避免读取行。幸运的是,访问内存中的行很快,因此这通常不会降低性能。
MySQL不能使用哈希索引进行排序,因为它们不会按序保存行。
哈希索引不支持部分键匹配,因为它们是由被检索的全部值计算出来的。
哈希索引只支持使用了=、IN()、和<=>的相等比较,不能加快范围查询。(注意<>和<=>不是相同的运算符)
访问哈希索引中的数据非常快,除非碰撞率非常高。当发生碰撞的时候,存储引擎必须访问链表中的每一个行指针,然后逐行进行数据比较,以确定正确的数据。
InnoDB存储引擎有一个特别的功能,叫自适应哈希索引。当InnoDB注意到一些索引值被频繁访问的时候,它就回在B-Tree的顶端为这些值建立内存中的索引。

作者:ydd326 发表于2012-2-13 13:09:05 原文链接

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-4 01:15 , Processed in 0.017714 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表