下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

mysql的索引知识详解

作者:课课家教育     来源: http://www.kokojia.com点击数:787发布时间: 2016-04-21 14:05:02

标签: 高性能mysql数据库mysql索引

  今天给大家介绍下MySQL的索引知识,大家都知道mysql索引包括了B-Tree索引,哈希索引,空间索引,以及其他类型的索引,那么这些不同类型的索引有什么特别之处?

  1.B-Tree索引

mysql的索引知识详解_数据库_mysql索引_课课家

  例子

  BTree索引起作用的情况

  1)匹配全名:例如,可以帮助查找name="Jack"anddob="1991-09-09"anddesc="good"的行

  2)匹配最左前缀:例如,可以查找所有name="Allen"的人

  3)匹配列前缀:例如,可以查找desc以g开头的人

  4)匹配最左前缀的范围值:例如,可以查找namelike"Jac%"的人

  5)匹配某列精确值和某列范围值:例如,可以查找name="Jack"anddesclike"goo%"

  BTree索引不起作用的情况

  1)查找没有从索引最左边开始的行:例如,查找dob="1991-09-09"或者desc="good",或者namelike"%ack"的行

  2)跳过索引列:例如,查找name="Jack"anddesc="good"此处跳过了dob

  3)存储引擎不优化第一个范围条件右边的列:例如,namelike"Jack%"anddob="1991-09-09"anddesc="good",此处dob和desc不会被优化

  2.哈希索引

  哈希索引使用一个hash表来保存索引经过hash以后的key,value指向实际数据地址,他是一种高效索引,但也有他的局限性:

  1.哈希索引是无序的,所以他只适用于=,<=>,IN()这样的精准查询,而不支持范围查询,如>,<,between。

  2.哈希索引不同的值经过hash以后可能存在相同的key,这些相同的key将会使用一个链表保存在一个key对应的地址中,当查询有碰撞的值时,hash索引先通过hash值找到链表,在通过匹配链表里的值来找到对应的数据地址,而当碰撞量大时,hash索引的效率就会降低

  一般Hash索引用于将做长字段列的索引,他会将长字段列的索引key压缩为短的hash值,例如:

  要建立长的url索引,就可以使用hash索引,由于url比较长,直接建立索引会使索引变得巨大,我们可以为url建立一个索引列,这样就可以压缩索引长度

  而如果数据库引擎不支持hash索引,我们可以自己模拟hash索引,

  比如一个表中有url列和url_crc列,然后为url_crc建立btree索引

  查询的时候使用如下查询

  这样就能使hash索引发挥作用,并且得到精确结果

  而直接使用url_crc查询,则有可能出现碰撞,例如

  有可能查出两条不同的url,因为这两条url的crc32值是一样的

  3.全文索引

      MyISAM独有的一种特殊索引(从MySQL5.6开始Innodb也支持全文索引),用来检索大段文本,查找文本关键字,索引类型为FULLTEXT,使用match和against函数操作,例如

  此处先对content列简历全文索引,然后查找content中含有Thepresident关键字的行

  其他

  MySQL的索引总是按照字符集的单位最大长度计算,例如engine的索引最大长度是999bytes,而使用了utf8字符集,那么索引的最大长度就是333个字符(utf8单个字符最大为3bytes)

  关于mysql的索引知识就介绍到这里,大家如果还有疑问,可以关注课课家,我们将详细为大家介绍mysql相关知识。

赞(16)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程