MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
今天我们就来聊聊 MySQL 的索引。尽管 MySQL 有许多优点,但是在海量数据的情况下,性能方面的表现还是会让人捉急,这时候就轮到 MySQL 的索引出场了。我会以抛出问题然后解决问题的方式来进行本次分享。比如:什么是索引?索引可以做什么?为什么使用索引可以提高效率? MySQL 支持哪些索引类型?什么情况下应不建或少建索引?什么是联合索引?为什么说 B+比 B 树更适合实际应用中操作系统的文件索引和数据库索引?
官方解释:索引(Index)是帮助 MySQL 高效获取数据的数据结构。
通俗理解:索引是一种特殊的文件( InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
首先,索引不是万能的,索引可以加快数据检索操作,但会使数据修改操作变慢。每次修改数据记录,索引就必须刷新一次。为了在某种程度上弥补这一缺陷,许多 SQL 命令都有一个 DELAY_KEY_WRITE 项。这个选项的作用是暂时制止 MySQL 在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入 /修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE 选项的作用将非常明显。
我们这里说的索引类型并不是指“主键索引”、“外键索引”这些,而是索引底层的数据结构。MySQL 的索引数据结构支持以下两种:
我们都知道什么时候应该使用索引,那么,什么时候不应该使用索引呢?我们上面说到,索引并不是万能的,所以,索引肯定也有不适用的场景。以下几个场景的时候,我们应该尽量不建或者说少建索引:
看到这里,你应该已经把 MySQL 的索引知识都过了个大概,希望本文能帮到你,happy hacking 。接下来听首听首歌放松一下吧。 真的爱你 BEYOND - BEYOND
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.