- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库和算法知识介绍
写在前面的话
在编程领域有一句人尽皆知的法则 “程序 数据结构 + 算法”,我个人是不太
赞同这句话 (因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和
工作中我确认深深感受到数据结构和算法的重要性,很多东 西,如果你愿意稍
稍往深处挖一点,那么扑面而来的一定是各种数据结构和算法知识。例如几乎每
个程序员都要打交道的数据库,如果仅仅是用来存个数据、建建 表、建建索引、
做做增删改查,那么也许觉得数据结构和这东西没什么关系。不过要是哪天心血
来潮,想知道的多一点,想研究一下如何优化数据库,那么一定避免 不了研究
索引的原理,如果想要真正明白索引是怎么工作的,如何合理的使用索引以优化
数据库,那么就免不了纠结于一堆数据结构与算法之间了。所以,如果说 “程
序的核心基础 数据结构 + 算法”我是十分赞同的,而一个想成为高手的程序
员,一定会去学习程序的核心基础。
好吧,说了这么 多,其实我的意思是如果想把数据库索引学个明明白白,就必
须将数据结构和算法作为切入点去学习,遗憾的是我目前还没有在网上找到从原
理层面去介绍数据库索 引的资料 (这里仅指在通俗资料领域没找到,不包括学
术论文),倒不是说没有高水平的程序员,就只在我们公司范围内能把这一点讲
透彻讲明白的数据库大牛也海 了去了,只是由于工作的忙碌和个人兴趣原因,
这些大牛们没有时间或没有兴趣去写这方面的文章。由于工作的需要,我这个半
桶水的程序员这段时间也草草研究一 些关于MySQL数据库索引的东西,虽然对
这方面的理解相比那些大牛差的太远了,不过这里我还是将这些浅薄的知识总结
成文吧。
摘要
数据结构及算法基础
索引的本质
B-Tree和B+Tree
为什么实用B-Tree (B+Tree)
MySQL索引实现
MyISAM索引实现
InnoDB索引实现
索引使用策略及优化
示例数据库
最左前缀原理与相关优化
索引选择性与前缀索引
InnoDB 的主键选择与插入优化
后记
参考文献
摘要
本 文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需
要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相
同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引
等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用 MySQL
时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。
文章主要内容分为四个部分。
第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。
第二部分结合MySQL数据库中MyISAM和InnoDB数据存储引擎中索引的架构实现
讨论聚集索引、非聚集索引及覆盖索引等话题。
第三部分根据上面的理论基础,讨论MySQL 中高性能使用索引的策略。
数据结构及算法基础
索引的本质
MySQL官方对索引的定义为:索引 (Index)是帮助MySQL高效获取数据的数据
结构。提取句子主干,就可以得到索引的本质:索引是数据结构。
我们知道,数据库查询是数据库的最主要功能之一,例如下面的SQL语句:
SELECT * FROM my_table WHERE col2 77
可以从表 “my_table”中获得 “col2”为 “77”的数据记录。
我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算
法的角度进行优化。最基本的查询算法当然是顺序查找 (linear search),遍
历 “my_table”然后逐行匹配 “col2”的值是否是 “77”,这种复杂度为O(n)
的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀
的查找算法,例如二分查找(binarysearch)、二叉树查找(binarytreesearch)
等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,
例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但
是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时
将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定
查找算法的数据结构,这些数据结构以某种方式引用 (指向)数据,这样就可
以在这些数据结构上实现
您可能关注的文档
最近下载
- 建筑工程危险源识别及预防措施.doc VIP
- 团餐的工作流程.pptx VIP
- 华能汶上西曼克400KWP分布式光伏项目EPC总承包工程技术规范书.pdf VIP
- 二类医疗器械经营质量管理制度.docx VIP
- 超高压气井井口除砂器及现场应用.pptx VIP
- 2023年专升本考试:专升本《政治》历年真题汇编(共184题).doc VIP
- 汇川INOVANCE MD290系列通用变频器综合手册.PDF VIP
- 第6课 从小爱科学 第2课时(教学课件)2025统编版道德与法治三年级上册.pptx
- 2025年江苏省职业院校技能大赛中职组(法律实务)考试题库(含答案).doc VIP
- ISO9001质量管理体系基础培训-适合新人培训.ppt
文档评论(0)