MySQL · 性能优化· CloudDBA SQL优化建议之统计信息获取

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

阿里云CloudDBA具有SQL优化建议功能,包括SQL重写建议和索引建议。SQL索引建议是帮助数据库优化器创造最佳执行路径,需要遵循数据库优化器的一系列规则来实现。CloudDBA需要首先计算表统计信息,是因为:

  • 数据库优化器通常是基于代价寻找执行路径;
  • SQL优化建议所针对的数据库不限于MySQL数据库,也不局限于某一个特定版本;

1. 基本原则

数据库统计信息在SQL优化起到重要作用。用来估算查询条件选择度的常见统计信息包括表统计信息和字段统计信息。DBA计算查询条件选择度或代价时经常通过手工执行SQL语句获取,并进行返回行数或代价的粗略估算。

  • 表统计信息:表中总记录数;
  • 字段统计信息:包括最大值,最小值;以及不同值个数;

而要相对更准确的获取条件选择度的估算,往往需要统计直方图(Histogram),因为多数情况,每个值的出现频度是不一样的。针对复杂SQL的优化,比如多条件查询、Range查询以及多表关联查询等,统计直方图能帮助DBA更好的进行代价估算。

在云上环境,获取统计信息以最小代价为前提的,不能对生产系统造成任何性能上的负面影响,也不能耗费较长时间。获取统计数据的基本原则如下:

  • 从备库获取统计数据;
  • 只统计最近数据;
  • 采取抽样的方式获取数据;
  • 不抽取原始数据,只对数据的hash值进行统计;

2. 最近数据统计

长期变化的数据通常具有周期性,并且以天为基本周期符合一般业务逻辑。因此多数情况无需对全量数据进行统计,抽取最近一天的数据通常具有代表性。

3. 样例数据统计

云上数据库通常要求表设计中有自增主键。在这一条件下获取表的最近数据的方法较为简单,比如:

 select * from tab order by id desc limit 1000; 

该语句通过在自增主键上做排序并获取最近插入的1000行数据。由于id是主键,排序并无额外代价。类似方式可以获取第其它样例数据,比如:

 select * from tab order by id desc limit 10000, 1000; 

4. 数据特征分析

基于抽样数据,对影响选择度或查询返回行数的特性进行分析:

  • 数据频率

对每一份样例数据中不同字段的频率统计之后,需要推导出或预测字段中的某个数值在全表中的频率情况。通过分析不同样例数据间的数据重合度在具体实践中具有实际意义。

  • 数据密度

获取每个字段的最大值和最小值代价较高。变通方法就是通过样例数据的最大最小值以及频率进行数据密度计算。基于数据密度数据,估算范围查询返回行数。

  • 字段关联性

评估多条件查询的选择度需要首先获取字段之间的关联性。若多条件查询条件关联性很低,则综合选择度就是单个条件选择度的乘积;若多条件查询条件关联性较高,则采用最小选择度(或乘以系数)作为综合选择度。

5. 总结

  • 直方图是对基本数据的估计,任何直方图都不是精确的;
  • 云上环境以最小代价获取统计数据是基本前提;
  • 数据库优化器需要选择的是最佳路径,得出字段之间选择度的相对值更为重要;
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
关系型数据库 MySQL 测试技术
MySQL的`IN`的优化经验
限制IN列表的长度:IN子句中的元素数量较多时,会显著降低查询性能。尽量减少IN中的项数量。
|
1天前
|
存储 SQL 关系型数据库
MySQL的优化利器⭐️索引条件下推,千万数据下性能提升273%🚀
以小白的视角探究MySQL索引条件下推ICP的优化,其中包括server层与存储引擎层如何交互、索引、回表、ICP等内容
MySQL的优化利器⭐️索引条件下推,千万数据下性能提升273%🚀
|
8天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】常用SQL
常用SQL分为三种类型,分别为DDL,DML和DQL;这三种类型的SQL语句分别用于管理数据库结构、操作数据、以及查询数据,是数据库操作中最常用的语句类型。 在后面学习的多表联查中,SQL是分析业务后业务后能否实现的基础,以及后面如何书写动态SQL,以及完成级联查询的关键。
162 6
|
8天前
|
SQL 关系型数据库 MySQL
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
|
8天前
|
SQL 存储 关系型数据库
【MySQL系列笔记】SQL优化
SQL优化是通过调整数据库查询、索引、表结构和配置参数等方式,提高SQL查询性能和效率的过程。它旨在减少查询执行时间、减少系统资源消耗,从而提升数据库系统整体性能。优化方法包括索引优化、查询重写、表分区、适当选择和调整数据库引擎等。
184 3
|
9天前
|
SQL 关系型数据库 MySQL
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
|
10天前
|
存储 SQL 缓存
30个业务场景的SQL优化
这些优化策略和示例可以帮助改善 `SQL` 查询的性能和效率。在实践中,需要综合考虑数据库设计、`SQL` 编写、服务器配置等多方面因素,选择合适的优化方法,并进行充分的测试和验证。以上 30 个经验是 V 哥在实际经验中总结的内容,当然,业务场景不同,具体的优化策略也会不同,按实际情况处理,这不就是程序员要做的事情么。
|
10天前
|
SQL 关系型数据库 MySQL
【MySQL】:探秘主流关系型数据库管理系统及SQL语言
【MySQL】:探秘主流关系型数据库管理系统及SQL语言
21 0
|
10天前
|
SQL 存储 算法
clickhouse SQL优化
clickhouse 是 OLAP 数据库,但其具有独特的索引设计,所以如果拿 MySQL 或者其他 RDB 的优化经验来优化 clickhouse 可能得不到很好的效果,所以特此单独整理一篇文档,用于有 SQL 优化需求的同学,本人接触 clickhouse 时间也不长,难免有不足的地方,如果大家发现错误,还请不吝指正。
|
13天前
|
SQL 关系型数据库 MySQL
【MySQL】SQL优化
【MySQL】SQL优化