高手问答第 303 期 —— 如何写出高质量 SQL?

小白兔爱吃大灰狼 发布于 07/25 11:49
阅读 8K+
收藏 7

数据技术都能四世同堂,凭什么开发 30 岁就要被干掉?>>>

许多 DBA、开发者在写 SQL 语句时,只追求是否能查得到,而忽略了查询的性能。然而,在海量数据环境下,一条 SQL 查询可能会给数据库带来巨大的性能压力。再多的服务器和内存,也会被慢查询拖垮。

这类 SQL 的问题发现的越早,带来的影响也就越小。所以,对 SQL 质量关注,无论是 DBA 还是开发者,都需要掌握 SQL 调优的技巧。一条高质量 SQL,能让系统访问数据库更流畅,保障用户体验和产品形象。

OSCHINA 本期高手问答(7 月 27 日 - 8 月 2 日),我们将与开发者围绕着 SQL 优化、SQL 质量保证等话题展开讨论。

可讨论的问题包括但不限于以下几个方面:
  • 你会在开发阶段优化 SQL 么?
  • 你会关注数据库的性能么?
  • 你所在公司内部是否有严格的 SQL 审核流程,有哪些特点?或槽点?
  • 近期你是否开始使用工具提高 SQL 质量?

如果你也想对 SQL 规范和 SQL 质量有更深的认知,那就不要错过本次活动,踊跃提问!让我们将 SQL 隐患消灭在萌芽之中!

嘉宾介绍

爱可生 研发工程师

SQL 质量审核工具 SQLE(开源)负责人

为了鼓励踊跃提问,@爱可生开源社区 会在问答结束后从提问者中抽取 5 名幸运会员赠予《高性能的 MySQL(第四版)》一本。

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就 如何写出高质量 SQL 相关问题向 @爱可生研发工程师 提问,直接回帖提问即可。

加载中
0
小白兔爱吃大灰狼
小白兔爱吃大灰狼

高手问答第 303 期 —— 如何写出高质量 SQL?

@钛元素  @young7  @Hector_T  @enable-  @赤脚小子

恭喜以上5位网友分别获得《高性能的 MySQL(第四版)》一本。

请于8月10日前登陆账号, 私信  @小白兔爱吃大灰狼   告知快递信息(格式:姓名+电话+地址),过期视为自动放弃哦~

5
clearsky1991
clearsky1991

@爱可生开源社区 你好,我有一点点想法想和您请教:

1. 我们总是提sql优化,可以具体分享一些这方面的具体经验以及最佳实践么

2. 近些年nosql的发展对经典的sql有哪些启示或影响,未来你觉得sql会有一些什么变化

3. 都有一些什么什么工具可以在哪些方面提高sql质量,原理是什么?

RTFSC2
RTFSC2
关于第三点,我提一点,个人观点就是一个词“代价”,sql执行是有代价的,sql优化的本质就是减少代价,比如说函数执行要时间代价,排序要代价。而资源是优先的,不管是cpu还是内存,我们优化sql就是用最小的代价实现我们的需求,如索引为什么是最重要的,索引可以避免无效的数据扫描,有排序性,这都是现成的。而sql优化到什么地步呢,个人观点就是有一个检索性不错的条件就基本ok了,没必要做的太极线
3
钛元素
钛元素

@爱可生开源社区 您好!请问企业业务系统当中,有一些比较缓慢的查询,但是又没有直接看到sql,就算是使用跟踪器跟踪,也无法直接对sql进行优化。比如某些OA系统,在多表联合查询的时候,查询结果的展现非常慢,还不如手写的sql(在sql查询工具中)。这种情况怎么办呢?另一个比较疑惑的问题就是,在开发业务系统的时候,通过ORM方式比较好,还是业务流程放在存储过程中比较好?最后就是mysql8里面的内存数据库,是否可以做为日常使用,这样速度会不会有非常大的提升?安全性如何?谢谢!

爱可生开源社区
爱可生开源社区
1. 这种情况就非常复杂了具体问题具体分析吧,你说的界面慢在业务SQL,网络,数据库配置,索引,主机性能上都有可能影响查询,需要逐步排查的。 2. 没有特殊需求,数据库层的业务逻辑还是建议优先放在应用内,避免跟数据库耦合,不需要进行存储过程和应用之间的版本控制,减少复杂度。 3. 最后用不用MySQL Memory 看业务场景吧,我没啥好的建议,可能得你自己调研下方案,确认是否满足需求。
3
iman123
iman123

@爱可生开源社区 你好,我有几个问题想请教一下您

1. 最近看到一些使用其他技术例如类库或框架来代替sql的,这类方案是否是未来的趋势,当前sql面临的最大挑战/问题是什么;

2. 面对多种多样的数据库,sql优化是否需要针对某一个具体的数据库进行专门的优化,亦或者是否有一些全局优化的方法、经验;

3. 目前市面上的一些管理数据库schema的版本控制工具有哪些推荐的,有没有一些最佳实践经验可以分享一下;

谢谢 :)

2
赤脚小子
赤脚小子

@爱可生开源社区  你好,请问你对现在的开源sql审计平台怎么看?有在使用的开源审计平台么?

审计平台是否已经可以代替人工审核了呢?如果是那开发人员是不是就不需要精通sql了?如果不是那么审计平台欠缺的能力有哪些呢?

爱可生开源社区
爱可生开源社区
现有的开源SQL审核(你提到的审计)产品还是很多的,怎么看的话也不能一概而论,不同的公司有不同的诉求。可以去github搜一下”SQL 审核",有很多同类型产品,可以去试试体验下。然后,SQL审核类产品最重要的点是帮你把SQL规范自动化落地,并不代表没有SQL审核产品就没有SQL规范,它只是减少了你审核的成本,能做到流程的规范。对于开发而言精通SQL是必备的技能。
2
e
ericyan1

@爱可生开源社区
sql  是怎么进行版本控制呢,有好一些的开源平台分享吗 ?

爱可生开源社区
爱可生开源社区
Flyway,Liquibase 都ok,另外也有一些国产平台可以github搜一下
2
Li_Peng
Li_Peng

@爱可生开源社区 您好,请教2个问题:

1、对于复杂SQL一般如何做检查和审计,有没有推荐的方法或工具软件?

2、对于使用ChatGPT等AI方式生成SQL、对SQL进行分析和优化,您觉得这是短期的热点行为,还是会变成一种常态化的工作方法呢?

爱可生开源社区
爱可生开源社区
SQL 审核类开源产品非常多的,github 搜一下就可以了;AI 生成 SQL 或 AI SQL 优化这个目前看确实可以解放部分生产力,市面上也有不少该类产品出现,至少是一个趋势,以后可能会成为 SQL 类工具必备的辅助技能,常态化的话还为时尚早。
2
enable-
enable-

@爱可生开源社区  有几个问题请教一下

  1. 如何看待现如今某些sql类工具上集成了AIGC (自然语言转SQL/SQL解释/SQL优化/SQL转换)提高了人员工作效率
  2. 能不能介绍一下 目前主流的 非人工SQL审核流程是个什么样子的,类似自动SQL诊断优化引擎核心,的一个大概的实现流程是什么样的(基于规则方式和基于代价模型)
  3. 数据库Schema版本管理,有没有什么好的办法吗 我们后端用的(Flyway/Liquibase)
  4. 目前公司每次分析 sql性能都是 EXPLAIN show profile 之类的,有什么需要特别注意的点 或者 需要重点留意的地方
爱可生开源社区
爱可生开源社区
3. 一般就是你提的这些产品,一般许多公司的实施方案是要实现版本控制与工单流打通实现自动化审核审批上线等 4. 这个没啥好的建议,具体问题具体分析吧,除非是说这个不能满足你的需求
爱可生开源社区
爱可生开源社区
1. 这绝对算是件好事,但对技术人员的要求并不会降低,还是得要具备一定的信息甄别能力,了解SQL优化等的原理; 2. 一般的流程无非就是事前事中事后等不同阶段引入审核流程,开发阶段的代码静态SQL扫描,生成变更时SQL上线阶段的规范把关,数据库运行时的监控巡检等;
2
young7
young7

@爱可生开源社区

您好,请教以下几个问题:

  1. 如何系统地学习SQL,有相的书籍推荐吗?
  2. SQL只是一个规范,并没有限制具体实现,因此同一个SQL语句在不同数据库上的实现是有差异的。所以在评估SQL性能的时候,有没有一些方法或者原则,能够在SQL语法的层面进行,无需理会具体实现?
  3. 能否介绍下SQL语句性能评估的通用原则/流程?
zjgadministrator
zjgadministrator
回复 @Hector_T : 同感
zjgadministrator
zjgadministrator
回复 @Hector_T : 同感
爱可生开源社区
爱可生开源社区
上面这会同学的回复的很不错,我补充几点吧,对于大部分底层程序员来说 CRUD 才是常态,SQL 原理,性能优化还是得了解的。另外也可以了解一些国产数据库 OceanBase,TiDB 等。
Hector_T
Hector_T
现在软件发展的开发,越来越弱化数据库的重要性,很多时候性能问题也不由优化SQL来保证,因为所谓优化SQL能够优化的空间是有限的,关系型数据库存在自身的瓶颈,实践中发现,性能的根本还是取决于整体数据结构和系统架构的设计,而不是SQL的优化,而且现在对于大量数据和并发量有更多的设计和架构思路,同时也伴随着大量对应的工具,SQL已经逐渐变成最无关紧要的一环了。
Hector_T
Hector_T
更推荐看一些看一些数据库机制剖析的书籍,比如《ORACLE编程艺术》之类的书,以及一些DBA管理方面的书,比如集群的架设、数据库存储、检索、通信原理之类的。 至于SQL语句性能评估,每种数据库都有自己的查询跟踪手段,通过这些即可评估SQL性能,不过你要首先理解这个数据库本身的特性。
下一页
0
爱可生开源社区
爱可生开源社区

感谢大家的热心参与,当天的问题最晚会在第二天上午 10:30 之前逐一解答。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部