有没有自动优化sql的工具?

时间:2024-04-15


同一个sql,不同的写法效率不同,但是问题来了,一般我们写的所谓的效率低的sql,都是在逻辑上最好理解,或者写出来最短,可读性最高的sql语句!执行效率搞的sql语句,大多是不太好理解,或者写起来很繁琐,可读性不如咱们的效率低的语句。

那么有没有好用的sql语句优化工具,自动能优化sql语句。

我也纳闷,这么牛逼的甲骨文,微软,国际商业机器公司,出的数据,为啥不能自动优化sql语句?自己按效率最高的方式执行!你写个语句,自动转换成效率最高的语句执行不就完了?

商用数据库的引擎中都有优化环节了,要不然,不定多慢。你开车非得刹车,自动驾驶也不能不让你刹车对吧?现在很多云上rds都提供了自动索引,这个上面尤其是微软和IBM做的比较多吧?可以看看,同样阿里云上的rds也都提供了自动索引。

有,但效果比较有限。不然,公司为啥还要雇人做这个?

自动优化sql有点人工智能了,其实工具离不开人,sql只是一个数据库工具而已,就想航母那么复杂,最后也需要人去维护,因此,如果有某种自动优化的辅助工具,人还是要理解SQL的原理。

逃不掉了,我感觉SQL优化不如先从复杂SQL逻辑理解入手,这样可能更接近这个问题的真相。

----

我可能是数据分析界,最能理解从SQL入门 到 工作中写SQL中间就差着一个 "复杂SQL“ 这句话的人了。当年为了写”复杂SQL“, 真的是为了工作中写 ”复杂SQL“, 整整花了我 300大洋,求教了一个老鸟才彻底的把我的SQL能力惊醒了。

---- 分隔符----

为什么简单SQL会写 一到工作就废

如果我没有猜错,90%的人都看过下面这本SQL神书:

另外99%的人都用过下面这些SQL练习网站:

[

自学SQL网(教程 视频 练习全套)

](自学SQL)

这个网站特点是比较清晰简单,中文的,马上可以练习,主要训练查询能力

sqlzoo练习网站,牛客网SQL面试题 。。。。

----- 非常非常不幸,我也是这些练习网站的重度用户----

比如这个:

a

我真的是从头到尾,把所有的练习题目过了一遍,感觉自身的SQL水平飞速上升。那感觉真的是没有哪个实际问题可以难倒我了。。

直到工作中遇到了 ”复杂SQL“, 才彻底败下阵来。

我就举一个例子:

SELECT sum(Domestic_sales+International_sales) as sum_sale,director,
   count(*) as count, 
   sum(Domestic_sales+International_sales)/count(*) as avg_sale 

FROM movies left join boxoffice on movies.id=boxoffice.movie_id 

group by director 
having count > 1 
order by avg_sale 
desc limit 1

---- 第一次看到这个SQL什么感觉?

好家伙,好像一切我见过的SQL知识点都用上了!但是我这个简单SQL的能力也彻底不知道怎么解释了。

幸好得到高人指点,最核心的一个思想是,不管多复杂的一个SQL,先要归结到最简单的SQL法则上。

凡是sql都分为,select,from,where 3段,你复杂的sql也是这3段。

只不过,复杂sql这3段都不简单,那既然这样,我们就把它分开来解决就好了。

比如上面的复杂sql,我们先解决from这一段,

SELECT * 

FROM movies left join boxoffice on movies.id=boxoffice.movie_id 

where 1

你不要关心select 和 where的情况下,只关心这个from,并且想象一下这个from的联表之后生成了新的table,我们叫 t1吧。

这会,这条sql是不是一下就简单了。


--- t1 现在看一下t1的内容

把两个表连在一起,形成表t1,现在请你记住这个t1,我们的select 和 where操作都在t1上进行

---- 现在我们把group等结果集操作放到一边,我们先只关心select部分。

SELECT sum(Domestic_sales+International_sales) as sum_sale,director,
   count(*) as count, 
   sum(Domestic_sales+International_sales)/count(*) as avg_sale 

FROM t1

#放一边

你看,这个简单SQL就是做了几个统计,每一个函数拆开来是不是很简单


--- 接下来,我们把select里的算法放在一边,我们去看看结果集的分组和排序

SELECT # 

FROM t1

group by director 
having count > 1 
order by avg_sale 
desc limit 1

一个复杂sql其实都是由简单的部分组成,只要你按照这个方法一层层的拆解,你会发现复杂sql不过如此!

---- 还有50个 SQL 性能优化 数据库 数据分析的资料可以进一步查看

资料下载

专业的事交给专业的人!Navicat 数据库管理工具的一大亮点是支持自动美化SQL功能,欢迎下载免费全功能试用版。希望对您有用!

“查询设计器”是一个用于设计查询的 Navicat 基本工具。

SQL 编辑器让你创建和编辑 SQL 文本,准备和运行已选择的查询。你可以在一个查询窗口编写多句 SQL 语句。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。

提示】当你使用 SQL 创建工具创建 SQL 时,SELECT 语句将会在 SQL 编辑器中自动生成。

Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置 SQL 格式及更多。

若要更改 SQL 语句格式,简单地从“格式”菜单选择 -

缩进

为已选择的代码行增加或减少缩进。

注释

为已选择的代码行加上注释或取消注释。

转换大小写

将已选择的代码变为大写或小写。

美化 SQL(仅适用于非 Essentials 版本)

以美化 SQL 选项设置已选择的代码的格式。

美化 SQL 选项(仅适用于非 Essentials 版本)

更改 SQL 美化器的选项。

选项或按钮描述
单行大括号字或符号限制设置短括号的长度。
大写关键字将全部 SQL 关键字转为大写。
美化保存及应用 SQL 美化器的选项。

简化 SQL(仅适用于非 Essentials 版本)

简化 SQL 编辑器中的 SQL 格式。

在编辑器中输入 SQL 语句时,Navicat 的自动完成代码功能会弹出一个建议列表。它以语句完成和数据库对象的可用属性(例如:数据库、表、字段、视图等)加上其相应的图标来协助你完成语句。你可以更新代码建议,选择“编辑”->“自动完成代码”->“更新自动完成代码的信息”

若要使用自动完成代码,只需简单地按“.”来显示在当前范围内的数据库对象的可用属性。

当建议列表出现时,按 TAB 插入第一个项目。你还可以使用上箭头或下箭头选择所需的项目,然后按 TAB 或 ENTER。

此外,你可以输入一个字符或在你的键盘上按 ESC 来使用自动完成代码,以取得 SQL 关键字或数据库对象。

如果你从列表中选择一个代码段的名,已保存的代码会插入到编辑器中。

提示】拖动建议列表的右下角来调整其大小。

你可以在选项中启用或禁用自动完成代码功能。

当你在编辑器中照常复制或剪切某些代码时,复制的内容也将添加到剪贴板堆栈中。剪贴板堆栈最多可存储 10 个项目,并使用后进先出的逻辑。若要从剪贴板堆栈粘贴项目,可以按 CTRL+SHIFT+V。按 CTRL+SHIFT+V 多次可以循环浏览剪贴板堆栈。

代码折叠功能让你折叠代码,代码块只会显示代码的第一行在 SQL 编辑器中。

Navicat 支持在编辑器中高亮显示成对的括号,即 ()。

注意】光标必须在括号上才能显示高亮显示。

有性能问题,上HeapDump性能社区

不同的业务场景,不同的设计思路,对应的“高效”标准不一样,所以优化的思路肯定很难标准化。

如果真有这样的工具存在,那也肯定得是人工智能了,简单的代码优化工具,很多框架里已经有了,但是要实现你说的这种功能,估计路还很长。

而且真的要是出现了,估计我们离淘汰也不远了!哈哈

所以现阶段,我们还是好好的学习SQL优化技巧吧:

如何写出高性能 SQL 语句?

SQL优化之数据倾斜解决实战

记一次慢SQL优化

Mysql的sql优化方法

由一次 UPDATE 过慢 SQL 优化而总结出的经

聊聊sql优化的15个小技巧

SQL性能优化技巧,常见优化10经验

16条MySQL使用规范,减少MySQL80%问题!

MySQL中的IO问题分析与优化

服务支持

我们珍惜您每一次在线询盘,有问必答,用专业的态度,贴心的服务。

让您真正感受到我们的与众不同 !

合作流程

网站制作流程从提出需求到网站制作报价,再到网页制作,每一步都是规范和专业的。

常见问题

提供什么是网站定制?你们的报价如何?等网站建设常见问题。

售后保障

网站制作不难,难的是一如既往的热情服务及技术支持。我们知道:做网站就是做服务,就是做售后。

平台注册入口