MySQL索引的概念以及七种索引类型介绍。

文章目录

  • 1 索引的概念
  • 2 索引的类型

1 索引的概念

索引(在MySQL中也叫做“键(key)”)是存储引擎用于快速找到记录的一种数据结构,这也是索引最基本的功能。

索引对于良好的性能非常关键。数据量越大时,索引对性能的影响也越重要,好的索引可以将查询性能提高几个数量级。在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但是在数据量逐渐增大时,糟糕的索引会使MySQL的性能急剧的下降。

索引优化是查询性能优化最有效的手段。

如果想要在一本书中找到某个特定主题,一般会先看书的目录,找到对应的页码,然后直接翻到对应的页码即可查看。在MySQL中,存储引擎用类似的方法使用索引,首先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行。简单的说,数据库索引类似于书前面的目录,能加快数据库的查询速度。

如下查询:

select name from user where user_id = 5

如果user_id列上建有索引,则MySQL将使用该索引找到user_id 为 5的行,即MySQL现在索引上按值进行查找,然后返回包含该值的数据行。

索引可以一个或多个列的值,如果索引包含多个列,那么列的顺序也很重要,因为MySQL只能高效地使用最左前缀列。

2 索引的类型

按照功能逻辑区分,MySQL目前主要有以下索引类型:

  1. 主键索引

    1. 数据列不允许重复,不允许为NULL,一个表只能有一个主键。
    2. ALTER TABLE table_name ADD PRIMARY KEY (column);
  2. 普通索引
    1. MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和NULL值。一个表允许多个列创建普通索引。
    2. ALTER TABLE table_name ADD INDEX index_name (column);
  3. 唯一索引
    1. 索引列中的值必须是唯一的,但是允许NULL值。建立唯一索引的目的大部分时候都是为了该属性列的数据的唯一性,而不是为了查询效率。一个表允许多个列创建唯一索引。
    2. ALTER TABLE table_name ADD UNIQUE (column);
  4. 全文索引
    1. 主要是为了快速检索大文本数据中的关键字的信息。字段长度比较大时,如果创建普通索引,在进行like模糊查询时效率比较低,这时可以创建全文索引,基于倒排索引,类似于搜索引擎。MyISAM存储引擎支持全文索引,InnoDB 存储引擎在 MySQL 5.6.4 版本中也开始支持全文索引。
    2. ALTER TABLE table_name ADD FULLTEXT (column);
  5. 前缀索引
    1. 在文本类型如BLOB、TEXT或者很长的VARCHAR列上创建索引时,可以使用前缀索引,数据量相比普通索引更小,可以指定索引列的长度,但是数值类型不能指定。
    2. ALTER TABLE table_name ADD KEY(column_name(prefix_length));
  6. 组合索引
    1. 指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀原则。
    2. 主键索引、普通索引、唯一索引等都可以使用多个字段形成组合索引。例如,ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 );
  7. 空间索引
    1. MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型。MySQL在空间索引这方面遵循OpenGIS几何数据模型规则。

参考资料:

  1. 《 MySQL 技术内幕: InnoDB 存储引擎》
  2. 《高性能 MySQL》

如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!

MySQL索引的概念以及七种索引类型介绍相关推荐

  1. Gridview数据控件的七种字段类型

    9.8  数据控件的七种字段类型(Fields Type)的应用 GridView共支持七种字段类型,字段原本应该叫"Column"比较恰当,但ASP.NET 2.0却采用另一个名 ...

  2. LINUX中的七种文件类型

    在liunx下一切皆文件. LINUX中的七种文件类型 d 目录文件. l 符号链接(指向另一个文件,类似于window下的快捷方式): s 套接字文件: b 块设备文件,二进制文件: c 字符设备文 ...

  3. Python开发工具的七种“工具”的介绍

    原文地址为: Python开发工具的七种"工具"的介绍 本文主要是对Python开发工具的七种介绍,其中包括, IDLE. BlackAdder.PythonWorks.Wing ...

  4. 浅析云计算的七种应用类型

    本文讲的是浅析云计算的七种应用类型,[IT168 资讯]如果说,用"云"来暗喻Internet互联网还可以理解的话,那么当"云"与"计算"联 ...

  5. 【Linux】七种文件类型

    Linux中的七种文件类型 d 目录文件. l 符号链接(指向另一个文件). s 套接字文件. b 块设备文件,二进制文件. c 字符设备文件. p 命名管道文件. - 普通文件

  6. Linux七种文件类型

    Linux七种文件类型 实,在磁盘上存储 - 普通文件 touch d 目录文件 mkdir l 软连接文件 ln -s 虚,不在磁盘上存储 c 字符设备文件 b 块设备文件 p 管道文件 mkfif ...

  7. 短视频如何用标题吸引人?分享七种标题类型,引起兴趣很关键

    短视频如何用标题吸引人?分享七种标题类型,引起兴趣很关键 对于做短视频的小伙伴们来说,如果想要吸引粉丝,获得流量,那么除了在内容上面要狠下功夫之外,标题也是不可忽略的.短视频的标题相当于是短视频内容的 ...

  8. C#Winform的DataGridView控件使用详解1—七种DataGridViewColumn类型使用方法

    C#Winform的DataGridView控件使用详解1-七种DataGridViewColumn类型使用方法 DataGirdView控件Column类型 DataGridViewButtonCo ...

  9. 七种不同类型的游戏测试技术

    游戏测试是协助确保最终产品具有最佳性能和质量的关键步骤之一.不同的测试技术,能够使游戏的品控人员更加集中精力发现诸如:缺陷.完整性.错误.瓶颈.不一致性.以及流 根据GlobalData(译者注:是全 ...

最新文章

  1. ML基础 : 训练集,验证集,测试集关系及划分 Relation and Devision among training set, validation set and testing set...
  2. epoll 或者 kqueue 的原理是什么?
  3. android bitmap 占用内存大小,drawable与bitmap内存占用大小
  4. SQL Server 大数据量插入和索引关系
  5. 解决Android Studio默认AppTheme 没有lable标签,不显示等问题
  6. 2018浙江大华股份有限公司-高级C/C++软件开发工程师面试准备
  7. 用foobar将ape转换为mp3格式
  8. 个人学习笔记——庄懂的技术美术入门课(美术向)06
  9. Boost.Asio Library
  10. 在字符串s的第n个字符后面插入字符串t
  11. 入侵检测系统的原理与应用
  12. 云数据库产品及架构设计背后的考量
  13. 华为荣耀20s云服务_华为荣耀20s云服务_华为荣耀20和20s的区别
  14. 清华管理评论 | 上奇数科:产业知识服务引擎开创者
  15. 如何UNI-APP中使用iconfont彩色图标
  16. 通俗地理解信号与系统中的卷积
  17. 安装CAD2021以及相关问题解决
  18. Java中找出缺失的数字
  19. 小班安全优质课教案《防止拥挤踩踏事故》
  20. Dusk network 生态图

热门文章

  1. 手机数据恢复的正确思路
  2. Android快递实时地图,android实现快递跟踪进度条
  3. 电脑64与32位是什么
  4. HR黑话大全:那些残忍的潜台词
  5. 2010年个人所得税计算公式
  6. 域计算机软件安装统计,域环境下电脑硬件信息统计的解决方案
  7. 实现自动驾驶的难点有哪些?
  8. Git 克隆指定版本
  9. Spark大数据处理讲课笔记1.7 掌握Scala类、对象、抽象类与特质
  10. 十五、Typora官方主题 + 自定义主题