InnoDB怎么使用索引

这篇文章中已经说了索引是个什么东西,并且是怎么运作的,但是并不会用啊。
这篇文章就是说说,索引怎么用,为什么那么用。

使用索引有什么代价

1、一个索引其实就是一个B+树,会占地方。如果你有的是地方,那就忽略
2、每次增删改,都不仅仅要维护聚簇索引,还有维护你创建的说有索引,如果你创建了特别多的索引那这里就会变慢了。

不是所有查询都会用上索引

先看一下联合索引问题,面试经常会问联合索引最左原则
为什么会存在这样的原则,为什么顺序很重要?
简单为用户表建立namephone ,address联合索引
这个联合索引会在创建一个B+树,这个树的叶子节点上数据只有主键和这三个参数。排序方式为先按照name生序排列,如果相同的name,在按照phone排序。最后按照address生序排序。

WHERE name = 'yusheng' AND phone = '15123983239' AND address= 上海市长宁区
这个条件是可以使用该联合索引,并且三列都会被使用。
因为叶子节点中的数据排序先按照name排序的,所以第一次查询只需要在该联合索引的B+树中查询name的值为yusheng的列即可,之后按在按照叶子节点phone获取,最后address。因为叶子节点的数据是按照这三列排序的,所以很容易查出来。

WHERE phone = '15123983239 AND 'name = 'yusheng' AND address= 上海市长宁区
按照上面的逻辑是不能用的,因为首先用phone去查询的话,毫无顺序。(因为顺序是先按照name排序,所以每个名字下的phone是对的,但是多个名字下的phone就没有顺序了,address也是如此)。但是其实是可以用的,而且和第一个相同。
这是因为mysql在查询之前会对语句进行优化,mysql知道这三个是联合索引,所以在执行查询的时候,会自动调换顺序。

WHERE phone = '15123983239 AND address= 上海市长宁区
这个用不上,因为上一个中就说了,排序是先按照name排序,虽然每个名字下phone是按照顺序的,但是不同名字下,phone就是无序的,address同理。

WHERE name = 'yusheng' AND address= 上海市长宁区
这个只能用上一半吧,因为name可以使用该联合索引,但是不同phone下面的address是无序的。

WHERE name = 'yu%' AND phone = '15123983239' AND address= 上海市长宁区
这个可以使用,因为差别和第一个只在name上面,因为name是字符串,叶子节点是按照字符串升序排列的,字符串比较会先比较第一个字符,之后在比较第二个字符。所以按照开头查询,是可以使用索引的。

等等,无论是分组,还是排序都是用叶子节点按顺序排序原理。

回表代价

索引文章中讲过,如果使用二级索引,回有回表操作。如果数据多的话,想一想,需要通过聚簇索引查出每一条的完整数据。
覆盖索引:你所查询的字段,刚刚好是联合索引的那几个字段,这样mysql在查询的时候就不会去回表查询,因为联合索引中的叶子节点就已经包含了所需的字段信息。
如果查询数据超过了全部数据的90%,那样就没有必要去使用索引了,因为90%的数据,全部回表,性能消耗很大,还不如直接在聚簇索引中遍历整个表。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容