Mysql系列的目标是:经过这个系列从入门到全面掌握一个高级开发所须要的所有技能。html
这是Mysql系列第21篇。java
本文开始连续3篇详解mysql索引:mysql
- 第1篇来讲说什么是索引?
- 第2篇详解Mysql中索引的原理
- 第3篇结合索引详解关键字explain
本文为索引第一篇:咱们来了解一下什么是索引?算法
路人在搞计算机以前,是负责小区建设规划的,上级领导安排路人负责一个万人小区建设规划,并提了一个要求:能够快速经过户主姓名找到户主的房子;让路人出个好的解决方案。sql
方案1
刚开始路人没什么经验,实在想不到什么好办法。微信
路人告诉领导:你能够去敲每户的门,而后开门以后再去询问房主姓名,是否和须要找的人姓名一致。数据结构
领导一听郁闷了:我敲你的头,1万户,我一个个找,找到何时了?你明天不用来上班了。数据结构和算法
这里面涉及到的时间有:走到每户的门口耗时、敲门等待开门耗时、询问户主获取户主姓名耗时、将户主姓名和须要查找的姓名对比是否一致耗时。函数
加入要找的人恰好在最后一户,领导岂不是要疯掉了,须要重复1万次上面的操做。mysql索引
上面是最原始,最耗时的作法,可能要找的人根本不在这个小区,白费力的找了1万次,岂不是要疯掉。
方案2
路人灵机一动,想到了一个方案:
- 给全部的户主制定一个编号,从1-10000,户主将户号贴在自家的门口
- 路人本身制做了一个户主和户号对应的表格,咱们叫作:
户主目录表
,共1万条记录,以下:
户主姓名 |
房屋编号 |
刘德华 |
00001 |
张学友 |
00002 |
路人 |
00888 |
路人甲java |
10000 |
此时领导要查找路人甲Java
时,过程以下:
- 按照姓名在
户主目录表
查找路人甲Java
,找到对应的编号:10000
- 而后从第一户房子开始找,查看其门口户号是不是10000,直到找到为止
路人告诉领导,这个方案比方案1有如下好处:
- 若是要找的人不在这个小区,经过
户主目录表
就肯定,不须要第二步了
- 步骤2中不须要再去敲每户的门以及询问户主的姓名了,只需对比一下门口的户号就能够了,比方案1省了很多时间。
领导笑着说,不错不错,有进步,不过我找路人甲Java
仍是须要挨家挨户看门牌号1万次啊!。。。。。你再去想一想吧,看看是否还有更好的办法来加快查找速度。
路人下去了苦思冥想,想出了方案3。
方案3
方案2中第2步最坏的状况仍是须要找1万次。
路人去上海走了一圈,看了那边小区搞的不错,不少小区都是搞成一栋一栋的,每栋楼里面有100户,路人也决定这么搞。
路人告诉领导:
-
将1万户划分为100栋楼,每栋楼有25层,每层有4户人家,总共1万户
-
给每栋楼一个编号,范围是[001,100],将栋号贴在每栋楼最显眼的位置
-
给每栋楼中的每层一个编号,编号范围是[01,25],将层号贴在每层楼最显眼的位置
-
户号变为:栋号-楼层-层中编号,如路人甲Java
户号是:100-20-04,贴在每户门口
户主目录表
仍是有1万条记录,以下:
户主姓名 |
房屋编号 |
刘德华 |
001-08-04 |
张学友 |
022-18-01 |
路人 |
088-25-04 |
路人甲java |
100-25-04 |
此时领导要查找路人甲Java
时,过程以下:
- 按照姓名在
户主目录表
查找路人甲Java
,找到对应的编号是100-25-04
,将编号分解,获得:栋号(100)、楼层(25)、楼号(04)
- 从第一栋开始找,看其栋号是不是100,直到找到编号为100为止,这个过程须要找100次,而后到了第100栋楼下
- 从100栋的第一层开始向上走,走到每层看其编号是否为25,直到走到第25层,这个过程须要匹配25次
- 在第25层依次看看户号是否为
100-25-04
,匹配了4次,找到了路人甲Java
此方案分析:
- 查找
户主目录表
1万次,不过这个是在表格中,不用动身走路去找,只须要动动眼睛对比一下数字,速度仍是比较快的
- 将方案2中的第2步优化为上面的
2/3/4
步骤,上面最坏须要匹配129次(栋100+层25+楼号4次),相对于方案2的1万次好多了
领导拍拍路人的肩膀:小伙子,去过上海的人确实不同啊,此次方案不错,不过第一步仍是须要不少次,可否有更好的方案呢?
路人下去了又想了好几天,忽然想到了咱们经常使用的字典,能够按照字典的方式对方案3中第一步作优化,而后提出了方案4。
方案4
对户主表进行改造,按照姓的首字母(a-z)制做26个表格,叫作:姓氏户主表,每一个表格中保存对应姓氏首字母及全部户主和户号。以下:
姓首字母:A |
|
姓名 |
户号 |
阿三 |
010-16-01 |
阿郎 |
017-11-04 |
啊啊 |
008-08-02 |
<br/>
姓首字母:L |
|
姓名 |
户号 |
刘德华 |
011-16-01 |
路人 |
057-11-04 |
路人甲 |
048-08-02 |
如今查找户号步骤以下:
- 经过姓名获取姓对应的首字母
- 在26个表格中找到对应姓的表格,如
路人甲Java
,对应L表
- 在L表中循环遍历,找到
路人甲Java
的户号
- 根据户号按照方案3中的(2/3/4)步骤找对应的户主
理想状况:
1万户主的姓氏分配比较均衡,那么每一个姓氏下面分配385户(10000/26) ,那么找到某个户主,最多须要:26次+385次 = 410次,相对于1万次少了不少。
最坏的状况:
1万个户主的姓氏都是同样的,致使这1万个户主信息都位于同一个姓氏户主表,此时查询又变为了1万屡次。不过出现姓氏同样的状况比较低。
若是担忧姓氏不足以均衡划分户主信息,那么也能够经过户主姓名的笔画数来划分,或者其余方法,主要是将用户信息划分为不一样的区,能够快速过滤一些不相关的户主。
上面几个方案为了快速检索到户主,用到了一些数据结构,经过这些数据结构对户主的信息进行组织,从而能够快速过滤掉一些不相关的户主,减小查找次数,快速定位到户主的房子。
索引是什么?
经过上面的示例,咱们能够概况一下索引的定义:索引是依靠某些数据结构和算法来组织数据,最终引导用户快速检索出所须要的数据。
索引有2个特色:
- 经过数据结构和算法来对原始的数据进行一些有效的组织
- 经过这些有效的组织,能够引导使用者对原始数据进行快速检索
mysql为了快速检索数据,也用到了一些好的数据结构和算法,来组织表中的数据,加快检索效率。
下篇文章将对mysql索引原理作详细介绍,敬请期待,喜欢的关注一下谢谢!
Mysql系列目录
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933257&idx=1&sn=0f0086a2465a2fcae13d3fea65064803&chksm=88621bb7bf1592a1ac94fe4107ba1ef26a0fa97e1bf9aea7279009d8bd240f1ef7d27aa10393&token=1876080189&lang=zh_CN#rd">第1篇:mysql基础知识</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933270&idx=1&sn=409080e17352da2035b0bfdf63ccdfde&chksm=88621ba8bf1592beb2ef6106d6bf9f3eccd48d6814c7031f36e3c8be68821f17cf065129688c&token=1876080189&lang=zh_CN#rd"> 第2篇:详解mysql数据类型(重点)</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933279&idx=1&sn=f8591b95362cb3c352d895b1289d665a&chksm=88621ba1bf1592b72a43a62e3f310695e8b87f17932d052145622c3edbb70ef8cb987849fc3e&token=516655478&lang=zh_CN#rd"> 第3篇:管理员必备技能(必须掌握)</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933289&idx=1&sn=c4f212c312ea86e08ad322caddd05e38&chksm=88621b97bf159281156ee3be510a1a15234531d2c97d66957e67377829ab23779809ea55bbde&token=1484565200&lang=zh_CN#rd"> 第4篇:DDL常见操做</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933296&idx=1&sn=1c56256d60c5847a944d87c8cfc9c14d&chksm=88621b8ebf159298b0789e2994d2aaf8b582effc7d8c1ba715deaca11c86a9dc8ac730878dc0&token=2000571846&lang=zh_CN#rd"> 第5篇:DML操做汇总(insert,update,delete)</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933300&idx=1&sn=bedef4d430dc76141e42e42ef6acfaa6&chksm=88621b8abf15929caae7904019c946a396885a33855ca465bacdd4187538005ebc3c116888f5&token=1814800041&lang=zh_CN#rd"> 第6篇:select查询基础篇</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933305&idx=1&sn=2c5ba0bea6fcdd57d86cecd63541f91a&chksm=88621b87bf1592915086c1e945119fcc95af6aa1127b90ef1b56b018083bfd787ad95efde918&token=1144227002&lang=zh_CN#rd"> 第7篇:玩转select条件查询,避免采坑</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933309&idx=1&sn=0f7dfec8bc70e67daa7159ee219325b8&chksm=88621b83bf1592951d949179061f39a1f4266b2879bc9a25af4da3b4b29f69ab1fcc595a462f&token=516674265&lang=zh_CN#rd"> 第8篇:详解排序和分页(order by & limit)</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933315&idx=1&sn=4abf2b34a53a85cbd4a3b9ee31fcd398&chksm=88621bfdbf1592eb6a5a13202588dde9068ac7e6391d8dbf3fde33647bf0e044839ba4228216&token=1937580929&lang=zh_CN#rd"> 第9篇:分组查询详解(group by & having)</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933321&idx=1&sn=110f6cacb90845bf2327fbcd7acd708c&chksm=88621bf7bf1592e1f1c0f2f01e40d4bd63a48d98daa4ba1157ecad4c6c6520d18b4b2c24c906&token=1096041061&lang=zh_CN#rd"> 第10篇:经常使用的几十个函数详解</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933325&idx=1&sn=33274227db275a3570e1e43ccdd4f49c&chksm=88621bf3bf1592e5b75f537e21961c4295fafb782dbf31c0c1cbf9e36f5f4ed44d31cdad68b3&token=1832579722&lang=zh_CN#rd"> 第11篇:深刻了解链接查询及原理</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933342&idx=2&sn=2e41daa0926a9c32d5fddd23590391aa&chksm=88621be0bf1592f66904a184858df7c11129e8b545c7626b8b6c1fcc32d3dfdd9ab21aeda8e5&token=386795745&lang=zh_CN#rd"> 第12篇:子查询</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933349&idx=1&sn=6e81f9046119cda43f8eb602d1139ef0&chksm=88621bdbbf1592cd9a20ec4715fe9f9459d079b641b04f607999c106cd52453d8c8508d939d7&token=386795745&lang=zh_CN#rd"> 第13篇:细说NULL致使的神坑,让人防不胜防</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933355&idx=1&sn=b426ad28dfc2a64bba813df5b7c341a4&chksm=88621bd5bf1592c3c08e441398f699d0a4c2303a51519aac169447f22765cc613dfc3d991f8b&token=385335213&lang=zh_CN#rd"> 第14篇:详解事务</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933370&idx=1&sn=4fe9b8e2aba766988c503737d34d9836&chksm=88621bc4bf1592d2b06d659884bf9881bd207a042ac36176f12808bd72f235e8e3404366259e&token=84059034&lang=zh_CN#rd"> 第15篇:详解视图</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933374&idx=1&sn=c294b6a69564a4c98d4c0cb29aeb9ac0&chksm=88621bc0bf1592d650752c44ca50540c1fa0c88c0a514019f1317559e13098de7dac37ddfc05&token=1531009350&lang=zh_CN#rd"> 第16篇:变量详解</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933382&idx=1&sn=4cf80b4f50c80dcc8171d2128b47cf63&chksm=88621c38bf15952e193177a0ba3e03beeaeed996553ce6900f91518310332e99c915e8be2566&token=1341741305&lang=zh_CN#rd"> 第17篇:存储过程&自定义函数详解</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933388&idx=1&sn=59cb1d23845e45894bb72c1e2479f074&chksm=88621c32bf1595241573e4194912ca60a51eb8477f4b49492e26668c9bebc032e9d6672e7fdd&token=1832749573&lang=zh_CN#rd"> 第18篇:流程控制语句</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933392&idx=1&sn=ff29e380b42a0aa7cb1dc7659d745686&chksm=88621c2ebf1595380f99d9c4c89581638a27a5cf356de35d31aa9ae7ac17e63abe0e4adc813c&token=1479782197&lang=zh_CN#rd"> 第19篇:游标详解</a>
- <a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933396&idx=1&sn=b6cc5d5287bf43d94e6706fa217aa8cb&chksm=88621c2abf15953c3200c6d4d945ad70bdd2177f020f8e2229ae269153bbc8bf251af83e1135&token=1846211483&lang=zh_CN#rd"> 第20篇:异常捕获及处理详解</a>
mysql系列大概有20多篇,喜欢的请关注一下,欢迎你们加我微信itsoku或者留言交流mysql相关技术!

原文出处:https://www.cnblogs.com/itsoku123/p/11636079.html