1100万大表11秒SQL优化二

举报
赵KK日常技术记录 发表于 2023/06/30 15:15:21 2023/06/30
【摘要】 引言:随着互联网技术的快速发展,数据的规模和增长速度也在迅猛增长。在大数据时代,如何高效地处理海量数据成为了互联网专家面临的一个重要挑战。本文将围绕一个具体案例,讨论如何通过SQL优化来提高对一张1100万大表的查询速度,从而提升系统性能。一、问题描述我们面临的问题是,有一张包含1100万条记录的大表,我们需要对该表进行频繁的查询操作。然而,由于数据量大,查询速度相对较慢,给系统带来了性能瓶...
引言:
随着互联网技术的快速发展,数据的规模和增长速度也在迅猛增长。在大数据时代,如何高效地处理海量数据成为了互联网专家面临的一个重要挑战。本文将围绕一个具体案例,讨论如何通过SQL优化来提高对一张1100万大表的查询速度,从而提升系统性能。

一、问题描述
我们面临的问题是,有一张包含1100万条记录的大表,我们需要对该表进行频繁的查询操作。然而,由于数据量大,查询速度相对较慢,给系统带来了性能瓶颈。
时间:上周六刚刚从外面回来,报出生产数据慢SQL开始优化
select t.x te.xfrom o_detail tleft join p_detail teon t.A = te.A and t.B = te.Band t.C = te.C and t.D = te.Dwhere t.A = '' and t.B = ''and te.C = '' and t.D = 0group by t.B,t.C,te.X,te.id,te.Y
分析执行计划

添加描述
因为te表未用到索引造成全表扫描
大表总数据条数

添加描述
那就看看为什么没走索引 怎么才能走索引  业务能不能优化 影不影响主数据?
分析各表在ABC字段均建立了索引或者覆合索引,唯独D字段未建立索引,那么是否D字段应该建索引呢?先强制走te表索引或者覆合索引
效果显著

添加描述
但是现在在模拟生产数据后te表仍然无法走任何索引
思路一:
查询t表,te表,全部索引
show index from t
show index from te
字段索引都有为什么不走?索引顺序正确啊,唯独没有D索引
强制走索引是否能提高效率?
是否覆盖索引优于普通索引?
优化计划1
将关联条件去掉,改为group by分组条件  走索引

添加描述
but  结果集不符合场景数量
提出想法:能不能为了索引  再用程序把商品去重呢,被否定
优化计划二
将重复的结果集去重,结果集正确,且走索引时间优化效果显著
在兴奋中带着成果验证后上线了
周一暴雷,商品结果正确,数量正确,但是在某一字段未进行筛选导致结果明细错误
最终还是采用去掉D字段,程序汇总过滤


二、SQL优化方案
为了提高对1100万大表的查询速度,我们可以采取以下SQL优化方案:

1. 索引优化
在查询前,我们可以为表中的关键字段创建索引。索引可以加速数据的检索过程,提高查询速度。可以通过EXPLAIN语句来查看SQL查询的执行计划,从而判断是否需要创建索引。如果发现某个查询没有使用索引,可以考虑对相关字段创建索引。

2. 查询语句优化
优化查询语句可以大大提高查询效率。首先,我们可以确保SQL语句的格式正确,避免语法错误导致无法正常执行。其次,可以减少不必要的查询操作,即只查询需要的字段,避免查询所有字段导致数据传输量过大。另外,可以使用JOIN语句代替子查询,避免多次查询。还可以使用条件限制查询范围,减少不必要的数据读取。

3. 数据分片
将大表按照某个字段进行分片,可以有效地降低单个查询的数据量。例如,可以按照时间字段将表分为多个小表,然后根据查询条件选择相应的小表进行查询。这样可以避免对整张大表进行查询,提高查询速度。

4. 缓存技术
可以使用缓存技术将查询结果缓存起来,下次查询时直接从缓存中获取结果,避免重复查询。对于一些频繁查询但数据不经常更新的场景,缓存是一个非常有效的优化手段。

5. 硬件优化
除了SQL优化外,还可以从硬件方面考虑优化。例如,可以增加服务器的内存和CPU核心数,以提升查询性能。另外,可以使用SSD硬盘代替传统机械硬盘,加快数据读取速度。

三、实施方案
在实施SQL优化方案时,我们可以按照以下步骤进行:

1. 分析查询需求,确定需要优化的SQL语句。

2. 使用EXPLAIN语句分析SQL查询的执行计划,找出性能瓶颈。

3. 根据执行计划,选择适当的索引进行创建。

4. 对查询语句进行优化,减少不必要的查询操作。

5. 根据数据的特点,进行分片操作。

6. 考虑使用缓存技术缓存查询结果。

7. 针对硬件方面的优化,根据实际情况增加内存和CPU核心数,使用SSD硬盘等。

8. 对优化后的SQL语句进行性能测试,评估优化效果。

9. 根据实际情况,调整优化方案,进一步提升查询性能。

四、总结与展望
通过对1100万大表的SQL优化,我们可以显著提高查询速度,提升系统性能。优化的关键在于深入分析查询需求,找出性能瓶颈,并针对性地进行优化。随着大数据技术的不断发展,SQL优化将成为互联网专家必备的技能,帮助企业提高数据处理效率,提升竞争力。未来,在海量数据的背景下,我们还将面临更多的挑战,如何通过创新的技术手段提升数据处理能力,将是我们需要不断探索的领域。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。