【大数据学习心得】从SQL语句执行顺序浅谈语句性能调优

举报
Felix666 发表于 2020/12/27 23:45:22 2020/12/27
【摘要】 在华为云《大数据全栈成长计划》中学到了SQL语句的执行顺序的章节,老师对顺序进行了很好的总结。在老师总结的基础上,我想结合自己的知识,浅谈语句性能调优的一些点,仅作为记录和总结。一、MySQL语句的执行顺序二、调优的原则1,使更少的数据进入下一环节因为MySQL也是按照一定顺序执行的语言,所以每一步输出的数据越少,则对后续运行的增益越快,在这个方面,主要有以下几点可供研究:第②、③步应杜绝使...

在华为云《大数据全栈成长计划》中学到了SQL语句的执行顺序的章节,老师对顺序进行了很好的总结。在老师总结的基础上,我想结合自己的知识,浅谈语句性能调优的一些点,仅作为记录和总结。

一、MySQL语句的执行顺序

二、调优的原则

1,使更少的数据进入下一环节

因为MySQL也是按照一定顺序执行的语言,所以每一步输出的数据越少,则对后续运行的增益越快,在这个方面,主要有以下几点可供研究:

  • 第②、③步应杜绝使用交叉连接,因为交叉连接会产生笛卡尔积,造成数据的错误和冗余;应充分考虑要选取的数据类别,如必须要使用连接,可优先使用内连接,必须使用外连接且左连接和右连接均可满足需求时当以产生无关数据较少的连接方式,MySQL不支持全连接,若必须使用全连接时应使用左外联 + 右外联实现,但不要忽略了对结果进行数据去重;
  • 第④步和第⑥步同为数据筛选,此处应遵循的原则是能在where中筛选的条件应尽量在where中筛选,这样可以尽量避免无效的数据流入下一环节。从这个方面来说,having原则上应只接收对分组字段的筛选,其余的筛选应统一在where中进行;
  • 第⑦步应禁止使用select * ,一方面可读性太差,另一方面会引入大量的脏数据,这一环节只取所需数据即可,且应精确到字段,另外,一些可以去重的字段,需要在select中去重;
  • 第③。④、⑥步的条件,应尽量是一对一的对应关系,尽量避免一对多现象的出现。

2,善用主键、外键和索引,提高查询效率

  • 第②、③步进行数据表之间连接时应尽量建立外键关系,以提高查询效率;
  • 对于多在第④步和第⑥步用于筛选条件的字段,应建立表内索引,以提高查询效率。

3,充分考虑时间和空间的均衡性

  • 若只为个别字段出现重复值,而又没有扩展属性时,建立外链表其实是不经济的做法,应该直接将值该字段的值保存在当前表中,以牺牲一定存储空间的代价减少第②、③步的使用次数
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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