【MYSQL】学习笔记 | 一图了解索引

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: 索引相当于书签,图书馆的目录。可以快速的寻找到位置。

网络异常,图片无法展示
|

索引

1. 什么是索引?

索引相当于书签,图书馆的目录。可以快速的寻找到位置。

是一种单独的、物理的数据库表中一列或多列进行排序的数据结构。

备注:B+Tree 可以对 <,<=,=,>,>=,BETWEEN,IN,以及不以通配符开始的 LIKE 使用索引。(MySQL 5.5 后)

2. 索引的优缺点

优点:

  1. 索引大大减小了服务器需要扫描的数据量。
  2. 索引可以帮助服务器避免排序和临时表。
  3. 索引可以将随机 I/O 变成顺序 I/O。

缺点:

  1. 查询速度提高,其他的操作效率降低,会导致数据页空间利用率降低。
  2. 小表无需索引。
  3. 列包含重复数据较多,无需索引。
  4. 索引文件会导致,索引文件变大。

3. 索引限制个数为16个。

4.MySql主要使用的数据结构?

二叉排序树 → 二叉平衡树 → B-Tree(B树) → B+Tree(B+树)

以下图片来源于网络

网络异常,图片无法展示
|
网络异常,图片无法展示
|

5. 主要知识点

  1. 回表查询,命中索引后还要回去聚簇索引中查找其他数据,少用select *。
  2. 索引覆盖,如果明确了列,就不需要回表,这也是为什么要避免select *的原因。
  3. 最左前缀原则,因为B+树是从左到右的顺序,匹配的时候也就从左到右,a,b,c三个是联合索引,按照最左前缀的原则,只要a是第一个, 索引才生效,相当于创建了联合索引(a,b),(a,c),(a,b,c)
  4. 索引下堆优化
select * from table where name like '陈%' and age > 26;
1.命中name索引,然后进行回表
2.命中name索引,在命中age索引,然后进行回表

6. 注意事项

  1. 索引列不能为null
  2. 使用短索引,一般开头几个字符不同的时候适合创建。
alter table yy_order add index `test_kkkk`(`car_uuid`(4));
  1. 索引如果已经进行where排序,在order上则失效。
  2. 不要在索引列上进行操作,否则会进行全表扫描。
  3. 不要使用not in和<>避免索引失效。

7. 命令

-- 查询当前索引使用情况
show status like '%Handler_read%';
-- 查看慢查询
-- 1.日志分析工具mysqldumpslow
-- 2.sql命令开启
- 查看日志输出方式
show variables like '%log_output%';
 -- 未使用索引记录
show variables like 'log_queries_not_using_indexes';
 set global log_queries_not_using_indexes=1;
 set global long_query_time=4;
show variables like '%slow%';
-- slow_launch_time: 慢查询超过的执行时间值
-- slow_query_log: 是否打开慢查询日志功能
-- show_query_log_file:慢查询日志目录

8. 索引优化

  1. 优化group by,默认情况下会对group by进行排序,想要避免排序结果消耗,可以指定order by null禁止排序
  2. 覆盖索引避免回表,不要*
  3. 最左原则,例如xyz联合索引,当y使用了>等其他符号,后面按的索引就失效了
  4. 索引列上不能使用表达式或函数
  5. 尽量选择不重复的值作为索引 6.前缀索引和索引列的选择
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
2月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
134 6
|
2天前
|
存储 关系型数据库 MySQL
Mysql索引:深入理解InnoDb聚集索引与MyisAm非聚集索引
通过本文的介绍,希望您能深入理解InnoDB聚集索引与MyISAM非聚集索引的概念、结构和应用场景,从而在实际工作中灵活运用这些知识,优化数据库性能。
29 7
|
18天前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
22 2
|
2月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
69 3
Mysql(4)—数据库索引
|
2月前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
69 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
2月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
75 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
200 1
|
2月前
|
存储 关系型数据库 MySQL
如何在MySQL中进行索引的创建和管理?
【10月更文挑战第16天】如何在MySQL中进行索引的创建和管理?
84 1