MySQL学习(二)—— 索引

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mysql学习笔记

什么是索引

提到索引,大家的第一反应应该想到小时候用到的字典,根据偏旁或者拼音来查找汉字,这就是一个简单的概念了。在计算机中,索引是对数据库表中的一个或多个字段进行排序的一种数据结构。

索引对于查询的效率有着十分重要的作用,特别是对于表非常大的情况下,不合适的索引可能会导致查询性能的急剧下降。大部分MySQL索引 (PRIMARY KEY, UNIQUE, INDEX, and FULLTEXT) 是存储在一种叫做B-Tree的数据结构,而某些特殊的数据类型会把索引存储在叫做R-tree的数据结构,如果是MEMORY存储引擎会支持HASH索引。


索引种类

MySQL目前提供了4种索引:

  • B-Tree 索引:最常见的索引类型,大部分引擎都支持B树索引。
  • HASH 索引:只有Memory引擎支持,使用场景简单。
  • R-Tree 索引(空间索引):空间索引是MyISAM的一种特殊索引类型,主要用于地理空间数据类型。
  • Full-text (全文索引):全文索引也是MyISAM的一种特殊索引类型,主要用于全文索引。


索引的作用

  • 索引可以将随机I/O变成顺序I/O。
  • 索引可以帮助服务器避免排序和临时表。
  • 索引可以减少服务器需要扫描的数据量。
  • 索引可以根据where条件快速匹配满足条件的行。
  • 如果一个查询有多个索引可以使用时,MySQL自动选择需要查找最少行数的索引。

如果索引太多,应用程序的性能会受到影响;索引太少,对查询的性能又会产生影响,所以要找到一个平衡点。


索引的弊端

解决查询优化不一定需要索引,像查询运行不够快就将WHERE子句中的条件全部放在索引中这种想法是不对的。索引能够极大地提高数据检索效率,也能够改善排序分组操作的性能,但有不能忽略的一个问题就是索引是完全独立于基础数据之外的一部分数据。


当遇到以下情况时,可以考虑不创建索引,可能查询效率还会更高:

  • 数据量比较少的表,没必要建索引,让查询做全表扫描即可;比如只有几百条数据。
  • 索引的选择性较低。比如性别、状态这种没区分度的字段。
  • MySQL只对以下操作符才使用索引:<,<=,=,>,>=,between,in, 以及某些时候的like(不以通配符%或_开头的情形),如果业务查询SQL很少使用以上操作符,可以考虑不建索引。

当我们设计查询语句时,尽量避免复杂的sql语句,不要查询不必要的数据,如有必要再加上索引。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
SQL 存储 关系型数据库
MySQL索引及事务
MySQL索引及事务
25 2
|
6天前
|
SQL 存储 关系型数据库
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!(下)
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!
24 2
|
6天前
|
SQL 关系型数据库 MySQL
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!(上)
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!
21 2
|
6天前
|
NoSQL 关系型数据库 MySQL
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
22 2
|
6天前
|
存储 算法 关系型数据库
MySQL索引详解
MySQL索引详解
15 0
|
6天前
|
存储 SQL 关系型数据库
完蛋!😱 我被MySQL索引失效包围了!
完蛋!😱 我被MySQL索引失效包围了!
|
6天前
|
SQL 存储 关系型数据库
MySQL的3种索引合并优化⭐️or到底能不能用索引?
MySQL的3种索引合并优化⭐️or到底能不能用索引?
|
6天前
|
存储 SQL 关系型数据库
MySQL索引,看这一篇就够了!
MySQL索引,看这一篇就够了!
|
6天前
|
Java 关系型数据库 MySQL
MySQL 索引事务
MySQL 索引事务
14 0
|
6天前
|
存储 SQL 关系型数据库
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
27 0