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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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; 
AI 代码解读

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

 select * from tab order by id desc limit 10000, 1000; 
AI 代码解读

4. 数据特征分析

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

  • 数据频率

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

  • 数据密度

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

  • 字段关联性

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

5. 总结

  • 直方图是对基本数据的估计,任何直方图都不是精确的;
  • 云上环境以最小代价获取统计数据是基本前提;
  • 数据库优化器需要选择的是最佳路径,得出字段之间选择度的相对值更为重要;
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
73530
分享
相关文章
MySQL细节优化:关闭大小写敏感功能的方法。
通过这种方法,你就可以成功关闭 MySQL 的大小写敏感功能,让你的数据库操作更加便捷。
49 19
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
【YashanDB知识库】如何将mysql含有group by的SQL转换成崖山支持的SQL
本文探讨了在YashanDB(崖山数据库)中执行某些SQL语句时出现的报错问题,对比了MySQL的成功执行结果。问题源于SQL-92标准对非聚合列的严格限制,要求这些列必须出现在GROUP BY子句中,而SQL:1999及更高版本允许非聚合列直接出现在选择列中。YashanDB和Oracle遵循SQL-92标准,因此会报错。文章提供了两种解决方法:使用聚合函数处理非聚合列,或将GROUP BY与ORDER BY拆分为两层查询。最后总结指出,SQL-92标准更为严谨合理,建议开发者遵循此规范以避免潜在问题。
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
57 9
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
69 3
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
151 82
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
224 42

热门文章

最新文章