SQL优化--索引的创建

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 如何优化sql,使查询更高效,主要从三个层面优化1、索引创建2、SQL的优化3、优化请求

1、mysql的架构

在不同层面上采取优化策略是不一样的。

mysql整体上有四层

层次

业务层

物理层

优化策略

第一层

查询需求

SQL层

优化查询请求,减少请求次数

第二层

查询优化器

MYSQL层

查询路径优化

第三层

存储引擎

InnoDB层

锁和缓存的优化,索引优化

第四层

资源

硬件

硬件优化,扩容

我们重点


本次主要的内容:主要是基于存储引擎的索引优化。主要通过分析索引的存储结构,理解索引的原理。




2、mysql InnoDB引擎索引储存结构

B+树

关于数据结构的模型,可以使用这个工具,查看数据结构的变化

Data Structure Visualization


B+的特点

1、B+ 是一个多路平衡查找树(和二叉树相比是多路的)

2、B+树非叶子节点只用于索引,不存储数据(B树中各个节点存储的都独立存储数据。)

3、B+树使用叶子节点存储数据

4、叶子节点之间通过双向链表来彼此链接,叶子节点内的数据按照顺序使用单链表连


InnoDb中B+使用的基本信息

索引实际上是存储在文件上的,确切的说是存储在页结构中的。InnoDB将数据划分为若干页,Mysql页的默认大小是16kb.可以使用下面的命令进行查看。


mysql中磁盘与内存交互的基本单位是页,这表示我们在磁盘与内存之间进行数据交互,最少是一页,并且每次交互都是整数页。即使我们数据存储只存储了一行,数据库I/O的操作单位也是一页。这样设计其实也是为了提高效率,毕竟I/O的时间消耗很大,不可能读、写一次数据就进行一次磁盘的I/O操作。

在InnoDB存储引擎中,我们假设主键索引使用BigInt,占8个字节,再加上6字节的页指针。因此,一页16KB的大小,可以存储的索引节点数量为:

(16KB - 页头20字节) / 14字节 =1170个索引节点,在使用主键索引的情况下,一页可以存储的主键索引节点数量1170索引节点。

加上每行数据占用的1K。那么3层数据可以存储的数据1170*1170*16=21,902,400。非常可观。

由此我们认为数据超过2千万,是要考虑分库分表的问题。





主键索引的存储


主键索引在叶子节点中直接包含了该行数据的全部列,这种索引格式被称为聚集索引

查询过程:

存储引擎会先根据查询条件在主键索引树上定位到对应的叶子节点,叶子节点中直接包含了该行数据的全部列,然后将查找到的数据返回给客户端,不需要再回到数据表中查找一次。使用聚集索引可以减少一次IO。


非主键索引的存储

叶子节点存储了索引列和数据行的主键。

查询的过程:

  1. 首先在二级索引中找到叶子节点对应的数据主键值;
  2. 根据这个主键值去聚集索引中找到真正对应的数据行。。

所以这里需要两次 B+ Tree 查找。

查询流程如下:


联合索引的存储结构

数据存储:一个索引出错了多个字段的列,排序优先按照最左侧面的字段。如上,优先按照name排序,在name排序的基础上,在进行age排序。


如果查询的只查询索引列,这个时候就不需要回表查询了,换句话说要查询的列已经被索引列覆盖。这也就是覆盖索引



思考:

1、理解一下最左匹配原则

2、数据库主键的设计原则

3、数据库NULL值的处理



讨论

1、联合索引应该如何建立

2、select * 查询有哪些问题

3、还有哪些常见的需要的SQL问题



本次主要分享索引的存储,后面分享优化器的使用和explain工具的使用

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
2月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
88 11
|
16天前
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
|
3月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
3月前
|
SQL 缓存 数据库
SQL慢查询优化策略
在数据库管理和应用开发中,SQL查询的性能优化至关重要。慢查询优化不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将详细介绍针对SQL慢查询的优化策略。
|
3月前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
3月前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
3月前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
156 3
|
3月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
230 10
|
3月前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
102 4