Mysql数据库索引

时间:2014-04-28 06:31:23   收藏:0   阅读:959

索引(Index)是帮助mysql高效获取数据的数据结构。对于高性能非常关键。

索引的重要性主要体现在数据量非常大的时候。规模小,负载轻的数据库即使没有索引也可以获到好的查询效果

例如:

 1 mysql>select first_name from actor where actor_id=5; 

改索引列位于actor_id列,因此mysql会使用索引找到actor_id为5的行。

索引有很多种类型,各自有各自的特点。索引实在存储引擎层实现的,而不是服务器层。

(1)、B-Tree索引

  谈论引擎多半指的是B-Tree引擎。大部分的存储引擎都支持此种索引

  MYSQL存储引擎使用不同的方式把索引保存到磁盘上,他们会影响性能。例如,MyISAM使用前缀压缩来减小索引,而Innodb不会使用压缩索引,因为它不能把压缩索引用于某些优化。同样,MyISAM索引按照存储的物理位置引用被索引的行。但是Innodb按照主键引用行。

  B-Tree索引通常意味着数据存储是有序的。并且每个叶子页到根的距离是一样的。

  B-Tree索引加速了数据访问,因为存储引擎不会扫描整个表得到需要的数据。从根节点开始,根节点保存了指向子节点的指针,并且存储引擎会根据指针寻找数据。   

(2)哈希索引

  该索引时建立在哈希表的基础上,它只对使用了索引中的每一列的精确查找有用。在mysql中只有memory存储引擎支持哈希索引。

哈希本身只是保存了简单的哈希值,哈希索引显得非常紧凑。哈希值的长度不会依赖索引的列。tinyint列的哈希索引和大型字符列的哈希索引大小是一样的

哈希索引的限制:

  mysql不可以通过哈希索引排序,因为不会按序保存行

  哈希索引只支持使用了= 、in()和<=>的相等比较。

  哈希索引只是包含了哈希码和行指针,而不是本身,mysql不能使用索引中的值来避免读取行

  访问哈希索引速度非常快,除非碰撞率很高。当发生碰撞的时候存储引擎必须访问链表中的每一个行指针,然后逐行进行数据的比较,以确定正确的数值。

(3)R-Tree索引(空间索引)

  MyISAM支持空间索引。可以使用如Geospatial这样的地理空间数据类型。和B-Tree不同的是空间索引不会要求WHERE字句使用索引的最左前端。它同时全放位的索引了数据。

(4)全文索引(FULLTEXT)

  这是MyISAM的一种特殊的索引。它从文本中找到关键字,而不是直接和索引中的值进行比较。全文搜索和其他匹配类型完全不同。

Mysql数据库索引,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!